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?


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

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

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.


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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.