2010-05-31 02:34:16 +0000 2010-05-31 02:34:16 +0000
31
31
Advertisement

Automatycznie uruchamiaj serwer VNC przy starcie

Advertisement

Zainstalowałem pulpit Ubuntu na serwerze VPS Ubuntu 9.10 i jestem w stanie połączyć się z serwerem za pomocą TightVNC. Jednakże, serwer VNC na tym VPS może być uruchomiony tylko poprzez zalogowanie się przez SSH i wpisanie następującego polecenia:

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

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

Advertisement
Advertisement

Odpowiedzi (5)

29
29
29
2010-05-31 02:51:43 +0000

Znalazłem te instrukcje poprzez wyszukiwanie w Google dla ubuntu launch vnc server on startup “.

  1. Zainstaluj serwer VNC.
  2. Uruchom vncserver po raz pierwszy, aby skonfigurować hasło.
  3. Dodaj następujący plik jako /etc/init.d/vncserver (pamiętaj, aby zmodyfikować USER, GEOMETRY, NAME, 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
12
12
12
2012-05-05 21:34:45 +0000

Jeśli chcesz mieć bardziej dynamiczną konfigurację i możliwość łączenia się dla wielu użytkowników, istnieje lepszy sposób na zrobienie tego. Jako root utwórz plik (i katalog, jeśli nie istnieje) /etc/sysconfig/vncservers, np. wykonaj:

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

Dodaj serwery według potrzeb dla każdego użytkownika, dodając coś takiego jak poniższe do pliku vncservers.conf, który właśnie utworzyłeś:

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

Następnie utwórz pusty skrypt init i uczyń go wykonywalnym:

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

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

#!/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, będziesz musiał uruchomić vncserver AT LEAST ONCE JAKO KAŻDY UŻYTKOWNIK, jako który chcesz się zalogować. Piszę to z wielkiej litery, ponieważ jeśli pominiesz ten krok, nic z tego nie będzie działać. Więc jako root możesz zrobić:

su justin -c vncserver
su bob -c vncserver

To utworzy katalog .vnc w domowym dir 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 zrestartować lub uruchomić usługę ręcznie wpisując:

service vncserver start
```.
1
Advertisement
1
1
2015-06-28 01:18:17 +0000
Advertisement

Uzyskuję dostęp do Ubuntu przyjaciół, którym pomagam, aby zainstalować lub skonfigurować, lub aby ich czegoś nauczyć.
Ponieważ potrzebuję dostępu z Internetu przez modem, używam vino.
Wszystkie opcje udostępniania i bezpieczeństwa są włączone podczas dostępu.
Nie chcę, aby serwer vino był aktywny przez cały czas: dobrze, że nie jest autostartowany.
Nie miałem menu System>Remote Desktop.
Wyedytował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ę znajomych o uruchomienie Preferencji pulpitu zdalnego i zaznaczenie opcji Sharing Allow… on.
Po wyjściu z Preferencji uruchamia się vino-serwer, a oni podają mi adres IP, którego mam użyć.
Po zakończeniu pracy, uruchamiają ponownie Preferencje, aby zaznaczyć opcję Sharing Allow… off.
Po wyjściu z Preferencji, vino-serwer zatrzymuje się i zatrzymałby się nawet gdyby został uruchomiony w stanie Sharing off.
Uważam tę procedurę za bardzo wygodną, jak również najbezpieczniejszą dla użytkownika.

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

0
0
0
2013-10-26 21:05:15 +0000

W Ubuntu 12.1 byłem w stanie przejść do Ustawień systemowych->Użytkownicy i wybrać użytkownika i ustawić “Automatyczne logowanie->Włączone”

Następnie byłem w stanie użyć tightVNC, aby dostać się bez logowania do samego pudełka.

Działało dobrze dla bezgłowego ubuntu linux box.

0
Advertisement
0
0
2017-01-06 11:27:48 +0000
Advertisement

Proponuję skorzystać z rozwiązania Stephena Jenningsa również jeśli potrzebujesz kilku vnc dla różnych użytkowników, po prostu tworząc kilka plików vncserver_john, vncserver_bill, ….. Dzięki temu możesz je uruchamiać/zatrzymywać osobno. Oczywiście, dobra praktyka programowania sugeruje, aby umieścić kod wspólny dla wszystkich użytkowników w jednym pliku, a źródło go ze 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 vncs lub X11 czasami się zacinają, a wyłączenie wszystkich użytkowników, aby przywrócić działanie jednego serwera jest dużym kłopotem.

Advertisement

Pytania pokrewne

11
13
19
8
5
Advertisement