Automatycznie uruchom serwer VNC podczas uruchamiania

29

Zainstalowałem pulpit Ubuntu na serwerze VPS Ubuntu 9.10 i jestem w stanie połączyć się z serwerem za pomocą TightVNC. Jednak serwer VNC na tym VPS można uruchomić tylko po zalogowaniu przez SSH i wpisaniu następującego polecenia:

vncserver :1 -geometry 800x600 -depth 16 -pixelformat rgb565

Jeśli uruchomię to polecenie podczas uruchamiania lub jako zadanie harmonogramu, nie uruchomi się. Jakie są moje opcje?

Zero
źródło
Czy próbowałeś dowiedzieć się, dlaczego się nie uruchamia?
Ignacio Vazquez-Abrams

Odpowiedzi:

27

Znalazłem te instrukcje , wyszukując w Google „ ubuntu uruchom serwer vnc przy uruchomieniu ”.

  1. Zainstaluj serwer VNC.
  2. Uruchom vncserverpo raz pierwszy, aby ustawić hasło.
  3. Dodaj następujący plik jako /etc/init.d/vncserver(pamiętaj, aby zmodyfikować UŻYTKOWNIKA, GEOMETRIĘ, NAZWĘ itd. Według własnych upodobań).
  4. sudo chmod +x /etc/init.d/vncserver
  5. sudo update-rc.d vncserver defaults

/etc/init.d/vncserver

#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          vncserver
# Required-Start:    networking
# Default-Start:     S
# Default-Stop:      0 6
### END INIT INFO

PATH="$PATH:/usr/X11R6/bin/"

# The Username:Group that will run VNC
export USER="mythtv"
#${RUNAS}

# The display that VNC will use
DISPLAY="1"

# Color depth (between 8 and 32)
DEPTH="16"

# The Desktop geometry to use.
#GEOMETRY="<WIDTH>x<HEIGHT>"
#GEOMETRY="800x600"
GEOMETRY="1024x768"
#GEOMETRY="1280x1024"

# The name that the VNC Desktop will have.
NAME="my-vnc-server"

OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"

. /lib/lsb/init-functions

case "$1" in
start)
log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
;;

stop)
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
;;

restart)
$0 stop
$0 start
;;
esac

exit 0
Stephen Jennings
źródło
Otrzymuję następujący komunikat o błędzie gist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9e. Uważam, że twoja konfiguracja wymaga aktualizacji z pewnymi pustymi wartościami.
niftylettuce
moje działa, ale jedynym problemem jest to, że prosi o podanie hasła, aby uruchomić skrypt po raz pierwszy. od momentu uruchomienia nie mogę go wprowadzić. jak mogę to naprawić?
droopie
@droopie znalazłeś rozwiązanie dla hasła?
Ben
12

Jeśli chcesz bardziej dynamicznej konfiguracji i możliwości łączenia się z wieloma użytkownikami, jest na to lepszy sposób. Jako root utwórz plik (i katalog, jeśli nie istnieje) / etc / sysconfig / vncservers tj. Wykonaj:

mkdir -p /etc/vncserver
touch /etc/vncserver/vncservers.conf

Dodaj serwery zgodnie z potrzebami dla każdego użytkownika, dodając do utworzonego pliku vncservers.conf coś takiego:

VNCSERVERS="1:justin 2:bob"
VNCSERVERARGS[1]="-geometry 1920x1080 -depth 24"
VNCSERVERARGS[2]="-geometry 800x600 -depth 8"

następnie utwórz pusty skrypt inicjujący i uczyń go wykonywalnym:

touch /etc/init.d/vncserver
chmod +x /etc/init.d/vncserver

dodaj następujące polecenie do /etc/init.d/vncserver:

#!/bin/bash

unset VNCSERVERARGS
VNCSERVERS=""
[ -f /etc/vncserver/vncservers.conf ] && . /etc/vncserver/vncservers.conf
prog=$"VNC server"

start() {
        . /lib/lsb/init-functions
        REQ_USER=$2
        echo -n $"Starting $prog: "
        ulimit -S -c 0 >/dev/null 2>&1
        RETVAL=0
        for display in ${VNCSERVERS}
        do
                export USER="${display##*:}"
                if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
                        echo -n "${display} "
                        unset BASH_ENV ENV
                        DISP="${display%%:*}"
                        export VNCUSERARGS="${VNCSERVERARGS[${DISP}]}"
                        su ${USER} -c "cd ~${USER} && [ -f .vnc/passwd ] && vncserver :${DISP} ${VNCUSERARGS}"
                fi
        done
}

stop() {
        . /lib/lsb/init-functions
        REQ_USER=$2
        echo -n $"Shutting down VNCServer: "
        for display in ${VNCSERVERS}
        do
                export USER="${display##*:}"
                if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
                        echo -n "${display} "
                        unset BASH_ENV ENV
                        export USER="${display##*:}"
                        su ${USER} -c "vncserver -kill :${display%%:*}" >/dev/null 2>&1
                fi
        done
        echo -e "\n"
        echo "VNCServer Stopped"
}

case "$1" in
start)
start $@
;;
stop)
stop $@
;;
restart|reload)
stop $@
sleep 3
start $@
;;
condrestart)
if [ -f /var/lock/subsys/vncserver ]; then
stop $@
sleep 3
start $@
fi
;;
status)
status Xvnc
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac

Jak Stephen wspomniał w swojej odpowiedzi, musisz uruchomić vncserver NAJMNIEJ RAZ JAKO KAŻDEGO UŻYTKOWNIKA, z którego chcesz się zalogować. Umieszczam to w czapkach, ponieważ jeśli pominiesz ten krok, żadne z nich nie zadziała. Więc jako root możesz zrobić:

su justin -c vncserver
su bob -c vncserver

Spowoduje to utworzenie katalogu .vnc w katalogu domowym każdego użytkownika z odpowiednimi skryptami startowymi.

Na koniec wykonaj następujące czynności:

update-rc.d vncserver defaults 99

teraz możesz albo ponownie uruchomić komputer, albo uruchomić usługę ręcznie, wpisując:

service vncserver start
Justin Buser
źródło
1
to faktycznie działa dla mnie, ale jedyną rzeczą jest to, że nie uruchamia się automatycznie, myślę, że może wymagać hasła użytkownika. ponieważ jest on uruchamiany automatycznie, nie widzę, aby o to prosił. jeśli ręcznie uruchomię skrypt, poprosi on o hasło do mojego użytkownika. jak mogę to naprawić?
droopie
1

Uzyskuję dostęp do Ubuntu znajomych, którym pomagam, instaluję, konfiguruję lub uczę ich czegoś.
Ponieważ potrzebuję dostępu z Internetu przez modem, używam vino.
Wszystkie opcje udostępniania i zabezpieczenia są włączone podczas dostępu.
Nie chcę, aby serwer vino był cały czas aktywny: w porządku, nie uruchamia się automatycznie.
Nie miałem menu System> Pulpit zdalny.
Edytowałem /usr/share/applications/vino-preferences.desktop w następujący sposób:

# OnlyShowIn=Unity;
Exec=bash -c 'vino-preferences;/usr/lib/vino/vino-server&zenity --info --text="Accès par Internet: `curl http://ipecho.net/plain`:5900"'

Przed pracą proszę moich znajomych o uruchomienie Preferencji pulpitu zdalnego i zaznaczenie opcji Zezwól na udostępnianie ... włączone.
Po wyjściu z Preferencji uruchamia się serwer vino i podają mi adres IP, którego należy użyć.
Po zakończeniu pracy ponownie uruchamiają opcję Preferencje, aby zaznaczyć opcję Zezwól na udostępnianie ... wyłączoną.
Po wyjściu z Preferencji, serwer vino zatrzymuje się i zatrzymywałby się, nawet gdyby został uruchomiony w stanie Udostępnianie.
Uważam tę procedurę za bardzo wygodną i najbezpieczniejszą dla użytkownika.

PS: programiści wolą, aby ich programy działały lokalnie (w sesji użytkownika), ponieważ błąd nie może wpływać w ten sposób na system globalny.

Papou
źródło
0

W Ubuntu 12.1 mogłem przejść do Ustawień systemu-> Użytkownicy, wybrać użytkownika i ustawić „Automatyczne logowanie-> WŁ.”

Potem mogłem użyć tightVNC, aby się zalogować bez logowania do samego pudełka.

Działa dobrze w przypadku bezgłowego systemu Linux Ubuntu

Jim
źródło
Z tego, co mogę zebrać, pytanie dotyczy włączenia vncserver podczas uruchamiania, a nie logowania użytkownika.
Roman Luštrik
0

Proponuję użyć rozwiązania Stephen Jenning również, jeśli potrzebujesz kilku VNC dla różnych użytkowników, po prostu tworząc kilka VNCserver_John, VNCserver_Bill, ... pliki. Umożliwia to ich osobne uruchomienie / zatrzymanie. Z pewnością dobra praktyka programowania sugeruje umieszczenie kodu wspólnego dla wszystkich użytkowników w jednym pliku i pozyskiwanie go od wszystkich innych.

„Odziedziczyłem” odpowiedzialność za serwer, na którym kilku kolegów zajmuje się programowaniem naukowym i oceną danych, każdy z osobnym VNC. Serwer faktycznie działa nieprzerwanie i stabilnie przez lata, a użytkownicy stają się leniwi, aby zapisać swoje otwarte okna. Jednak pojedyncze serwery vncserver lub X11 czasami blokują się, a zamykanie wszystkich użytkowników w celu ponownego uruchomienia jednego serwera jest bardzo uciążliwe.

Peter Steier
źródło