VNC sunucusunu başlangıçta otomatik başlat


29

Ubuntu masaüstünü bir Ubuntu 9.10 VPS sunucusuna kurdum ve TightVNC kullanarak sunucuya bağlanabiliyorum. Ancak, bu VPS'deki VNC sunucusu yalnızca SSH ile giriş yaparak ve aşağıdaki komutu yazarak başlatılabilir:

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

Bu komutu başlangıçta veya bir zamanlama görevi olarak çalıştırırsam, başlamaz. Seçeneklerim neler?


Neden başlamayacağını anlamaya çalıştın mı?
Ignacio Vazquez-Abrams

Yanıtlar:


27

Bu talimatları Google’da " başlangıçta ubuntu launch vnc server " araması yaparak buldum .

  1. VNC sunucusunu kurun.
  2. vncserverBir şifre ayarlamak için ilk kez başlatın .
  3. Aşağıdaki dosyayı farklı şekilde ekleyin /etc/init.d/vncserver(KULLANICI, GEOMETRİ, ADI, vb. İstediğiniz gibi değiştirdiğinizden emin olun).
  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

Aşağıdaki hata çıkışını alıyorum: gist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9e , yapılandırmanızın bazı boş değerlerle güncellenmesi gerektiğine inanıyorum.
niftylettuce

benimki çalışıyor ama tek sorun betiği ilk kez başlatmak için benden bir şifre girmemi istiyor. açılışta beri giremiyorum. nasıl düzeltebilirim
droopie

@droopie şifre için bir çözüm buldunuz mu?
Ben

12

Daha dinamik bir yapılandırma ve birden fazla kullanıcı için bağlantı kurma yeteneği istiyorsanız, bunu yapmanın daha iyi bir yolu var. Kök olarak dosyayı oluşturun (ve eğer yoksa dizini) / etc / sysconfig / vncservers yani yapın:

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

Yeni oluşturduğunuz vncservers.conf dosyasına aşağıdaki gibi bir şey ekleyerek her kullanıcı için sunucuları ekleyin:

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

daha sonra boş bir init betiği oluşturun ve çalıştırılabilir hale getirin:

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

aşağıdakini /etc/init.d/vncserver dosyasına ekleyin:

#!/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

Stephen'ın cevabında bahsettiği gibi vncserver AT LEAST ONCE AS HER GİRİŞ olarak giriş yapmak zorundasınız. Bunu büyük harflerle yazdım çünkü bu adımı atlarsanız hiçbiri işe yaramaz. Kök olarak yapabilecekleriniz:

su justin -c vncserver
su bob -c vncserver

Bu, her kullanıcının ana dizininde uygun başlangıç ​​komut dosyaları ile bir .vnc dizini oluşturur.

Son olarak, aşağıdakileri yapın:

update-rc.d vncserver defaults 99

şimdi şunu yazarak hizmeti yeniden başlatabilir veya yeniden başlatabilirsiniz:

service vncserver start

1
Bu aslında benim için çalışıyor ama tek şey oldukça otomatik olarak başlamaması. Sanırım kullanıcı şifresi istiyor olabilir. otomatik olarak tetiklendiğinden, onu istediğini görmüyorum. Eğer betiği manuel olarak başlatırsam, kullanıcı şifremi ister. bunu nasıl düzeltebilirim?
sarkık

1

Yardım ettiğim Ubuntu’ya erişiyorum, kuruyorum, yapılandırıyorum ya da onlara bir şey öğretiyorum.
Modem aracılığıyla internetten erişime ihtiyacım olduğundan vino kullanıyorum.
Erişim sırasında tüm paylaşım ve Güvenlik seçenekleri açılır.
Vino sunucusunun her zaman aktif olmasını istemiyorum: Tamamen otomatik olarak başlamaması iyi.
Sistem> Uzak Masaüstü menüsü yoktu.
/Usr/share/applications/vino-preferences.desktop dosyasını aşağıdaki gibi düzenledim:

# 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"'

İşe gitmeden önce arkadaşlarımdan Uzak Masaüstü Tercihleri'ni çalıştırmalarını ve Paylaşım İzin Ver ... seçeneğini işaretlemelerini rica ediyorum.
Tercihlerden çıkıldığında vino-server başlar ve kullanılacak IP adresini söylerler.
İş bittiğinde, Paylaşım İzin Ver ... kapalı'yı işaretlemek için Tercih'i tekrar çalıştırırlar.
Tercihler'den çıkarken vino sunucusu durur ve Paylaşma durumunda başlatılsa bile durur.
Bu prosedürü kullanıcı için en güvenli olduğu kadar uygun buluyorum.

PS: geliştiriciler programlarının yerel olarak çalışmasını tercih ediyor (bir kullanıcı oturumu içinde) çünkü bir hata küresel sistemi bu şekilde etkileyemiyor.


0

Ubuntu 12.1'de Sistem Ayarları-> Kullanıcılar'a girip bir kullanıcı seçip "Otomatik Giriş-> AÇIK" olarak ayarlayabildim.

Sonra kutuya giriş yapmadan içeri girmek için tightVNC'yi kullanabildim.

Başsız ubuntu linux kutusu için iyi çalıştı


Toplayabildiğim kadarıyla soru, kullanıcının giriş yapmasını değil başlangıçta vncserver'ı çalıştırmakla ilgili.
Roman Luštrik

0

Farklı kullanıcılar için birkaç vnc'ye ihtiyacınız varsa, sadece birkaç vncserver_john, vncserver_bill, ... dosyaları oluşturarak stephen jennings çözümünü kullanmanızı öneririm. Bu, onları ayrı ayrı başlatmanıza / durdurmanıza olanak sağlar. Elbette, iyi programlama uygulaması, tüm kullanıcılar için ortak olan kodu bir dosyaya koymanızı ve diğerlerinden kaynaklamanızı önerir.

Bazı meslektaşlarımın bazı bilimsel programlama ve veri değerlendirme yaptığı, herkesin ayrı bir vnc yaptığı bir sunucu için "miras" sorumluluğum var. Sunucu aslında yıllar boyunca sürekli ve istikrarlı bir şekilde çalışıyor ve kullanıcılar açık pencerelerini kurtarmak için tembelleşiyorlar. Ancak, tek vncservers veya X11 sunucuları bazen sıkışıp kalıyor ve bir sunucuyu tekrar çalıştırmak için tüm kullanıcıları kapatmak büyük bir sıkıntı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.