Automatyczne uruchamianie TightVncServer na Raspberry Pi 2

11

Mam Raspberry Pi 2 i śledzę post na Raspberrypi.org, ale Tight VNC Server nie uruchamia się ponownie. Wydaje się, że nie ma żadnego błędu.

Jak sprawić, by TightVncServer uruchomił się przy Pi Reboot?

sarin
źródło
Nie mogę jeszcze opublikować odpowiedzi, ale istnieje prosta metoda, którą zacząłem pracować nad moją pi 3 B udokumentowaną tutaj na adafruit: learn.adafruit.com/...
Steven Evers

Odpowiedzi:

10

Aby to zrobić, możesz użyć odrobiny sprytu w Linuksie.

Naszym pierwszym zadaniem będzie edycja pliku /etc/rc.local. Ten plik może zawierać polecenia uruchamiane podczas uruchamiania. Jeśli spojrzymy na plik, zobaczymy, że jest tam już niewiele wpisów;

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

exit 0

Pierwszy zestaw linii ze znakiem krzyżyka (#) przed nimi to komentarze. Są one po to, aby wyjaśnić, co dzieje się z kimś czytającym plik.

Wiersze kodu na dole wyraźnie mają związek z adresem IP komputera. W rzeczywistości są one krótkim skryptem, który sprawdza, czy Raspberry Pi ma adres IP, a jeśli tak, drukuje go. Jeśli sobie przypomnisz, możesz zobaczyć adres IP wydrukowany na ekranie, gdy Pi uruchamia się w ten sposób

My IP address is 10.1.1.8

Raspbian GNU/Linux 7 raspberrypi tty1

raspberrypi login:

Ten fragment skryptu w rc.local jest kodem odpowiedzialnym za wydrukowanie adresu IP!

Dodamy następujące polecenie do rc.local;

su - pi -c '/usr/bin/tightvncserver :1'

To polecenie przełącza użytkownika na użytkownika „pi” z su - pi. Su oznacza „przełącz użytkownika”, myślnik (-) zapewnia, że ​​środowisko użytkownika pi (podobnie jak wszystkie jego ustawienia) jest używane poprawnie, a pi jest użytkownikiem.

Opcja -c deklaruje, że następnym elementem wiersza będzie polecenie, które zostanie uruchomione, a część wewnątrz znaków cudzysłowu („/ usr / bin / tightvncserver: 1”) to polecenie.

Polecenie w tym przypadku wykonuje plik tightvncserver, który znajduje się w katalogu / usr / bin i określa, że ​​powinniśmy rozpocząć sesję pulpitu 1 (: 1).

W tym celu dokonamy edycji pliku rc.local za pomocą następującego polecenia;

sudo nano /etc/rc.local

Dodaj nasze wiersze, aby plik wyglądał następująco;

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# Start tightvncserver
su - pi -c '/usr/bin/tightvncserver :1'

exit 0

(Możemy również dodać własny komentarz do pliku, aby przyszli czytelnicy wiedzieli, co się dzieje)

To powinno być to. Powinieneś teraz być w stanie przetestować, czy usługa uruchamia się, gdy Pi uruchamia się przez ponowne uruchomienie.

Jeśli powyższe wydaje się nieco zbyt rozwlekłe, zachęcamy do zapoznania się z pełniejszym uzasadnieniem tutaj .

d3noob
źródło
Nie działa mi.
Chameleon,
Odpowiedź została napisana dla „Wheezy” wersji Raspbian. Późniejsza wersja („Jessie” i (przypuszczam) „Stretch”) mają inną domyślną metodę. Zobacz tutaj alternatywne podejście.
d3noob,
5

Przed rozpoczęciem upewnij się, że Twój Pi jest podłączony do Internetu \ sieci przez Ethernet \ Wi-Fi.

Otwórz terminal i wprowadź następujące polecenia:

Uzyskaj adres IP Pi dla połączenia zdalnego (do użytku później)

hostname -I

Zainstaluj TightVncServer

sudo apt-get update
sudo apt-get install tightvncserver
tightvncserver

Przy pierwszym uruchomieniu należy podać hasło i je zweryfikować. Nie trzeba wprowadzać hasła tylko do widoku.

Aby skonfigurować automatyczne uruchamianie jako usługę podczas uruchamiania Pi:

Otwórz nano (edytor tekstu), aby utworzyć plik do automatycznego uruchomienia Tight VNC Server sudo nano /etc/init.d/tightvncserver

Wpisz następujące polecenie (lub skopiuj i wklej ):

#!/bin/sh
# /etc/init.d/tightvncserver
# Set the VNCUSER variable to the name of the user to start tightvncserver under
VNCUSER='pi'
case "$1" in
  start)
    su $VNCUSER -c '/usr/bin/tightvncserver :1'
    echo "Starting TightVNC server for $VNCUSER"
    ;;
  stop)
    pkill Xtightvnc
    echo "Tightvncserver stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/tightvncserver {start|stop}"
    exit 1
    ;;
esac
exit 0

Naciśnij Ctrl + x, następnie y, aby zapisać i Enter, aby zachować tę samą nazwę pliku.

Edytuj uprawnienia do tego pliku, aby był wykonywalny i aktywny:

sudo chmod 755 /etc/init.d/tightvncserver
sudo update-rc.d tightvncserver defaults

Uruchom ponownie, aby przetestować ponowne uruchomienie sudo

Zainstaluj klienta vnc dla swojego systemu operacyjnego i spróbuj połączyć się po ponownym uruchomieniu Pi!

W systemie Windows: na przykład klient TightVNC . Nie ma potrzeby instalowania serwera.

Uruchom VNC Client Connect, używając adresu IP z góry tego postu. Zmień adres IP na swój. Numer portu w wielu postach internetowych jest podany tylko jako 2 cyfry. To krótka ręka i jeśli używasz powyższego skryptu, twoje pi działa na porcie 1, powinieneś użyć 590 1 . Jeśli 2, to 590 2 itd.

192.168.1.123:5901
sarin
źródło
Twoje rozwiązanie działa dla mnie idealnie, ale nie otrzymuję pełnego ekranu. Jak mogę uzyskać pełny ekran? ( vncserver -geometry 1366x768 -depth 24 -dpi 96. Użyłem tego polecenia wcześniej, aby uzyskać pełny ekran. Czy jest jakiś sposób, aby dodać wiersz w kodzie?)
opu 웃
@opu 웃 Linia su $VNCUSER -c '/usr/bin/tightvncserver :1'uruchamia polecenie, o którym mowa. Po prostu dołącz opcje na końcu tego wiersza, co da w wyniku coś w rodzajusu $VNCUSER -c '/usr/bin/tightvncserver :1' -geometry 1366x768 -depth 24 -dpi 96
Trent
Jak debugować, jeśli to nie działa? Jeśli uruchomię tightvncserver w wierszu polecenia użytkownika pi, uruchamia się i mogę się zdalnie zalogować, ale nie uruchamia się automatycznie przy użyciu tego lub rozwiązania /etc/rc.local.
Alan McDonley,