เริ่มต้นเซิร์ฟเวอร์ VNC โดยอัตโนมัติเมื่อเริ่มต้น


29

ฉันติดตั้งเดสก์ท็อป Ubuntu บนเซิร์ฟเวอร์ Ubuntu 9.10 VPS และสามารถเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้ TightVNC อย่างไรก็ตามเซิร์ฟเวอร์ VNC บน VPS นี้สามารถเริ่มต้นได้โดยการล็อกอินผ่าน SSH และพิมพ์คำสั่งต่อไปนี้:

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

หากฉันรันคำสั่งนี้เมื่อเริ่มต้นหรือตามกำหนดเวลางานคำสั่งนั้นจะไม่เริ่มต้น ตัวเลือกของฉันคืออะไร?


คุณเคยลองคิดดูไหมว่าทำไมมันถึงไม่เริ่ม?
Ignacio Vazquez-Abrams

คำตอบ:


27

ฉันพบคำแนะนำเหล่านี้โดยค้นหา Google สำหรับ " ubuntu launch vnc server เมื่อเริ่มต้น "

  1. ติดตั้งเซิร์ฟเวอร์ VNC
  2. เปิดตัวvncserverเป็นครั้งแรกเพื่อตั้งค่ารหัสผ่าน
  3. เพิ่มไฟล์ต่อไปนี้เป็น/etc/init.d/vncserver(โปรดแก้ไข USER, GEOMETRY, NAME และอื่น ๆ ตามที่คุณต้องการ)
  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

ฉันได้รับเอาต์พุตข้อผิดพลาดต่อไปนี้gist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9eฉันเชื่อว่าการกำหนดค่าของคุณต้องได้รับการอัปเดตด้วยค่าที่ว่างเปล่า
niftylettuce

การทำงานของฉัน แต่ปัญหาเดียวคือมันขอให้ฉันป้อนรหัสผ่านเพื่อเริ่มสคริปต์เป็นครั้งแรก ตั้งแต่มันบูตฉันไม่สามารถใส่มัน ฉันจะแก้ไขได้อย่างไร
droopie

@droopie คุณพบทางออกสำหรับรหัสผ่านหรือไม่
Ben

12

หากคุณต้องการการกำหนดค่าแบบไดนามิกที่มากขึ้นและความสามารถในการเชื่อมต่อสำหรับผู้ใช้หลายคนก็มีวิธีที่ดีกว่าในการทำเช่นนี้ ในฐานะที่เป็นรากสร้างไฟล์ (และไดเรกทอรีหากไม่มี) / etc / sysconfig / vncservers ie ทำ:

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

เพิ่มเซิร์ฟเวอร์ตามต้องการสำหรับผู้ใช้แต่ละคนโดยเพิ่มสิ่งต่อไปนี้ในไฟล์ vncservers.conf ที่คุณเพิ่งสร้างขึ้น:

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

สร้างสคริปต์เริ่มต้นที่ว่างเปล่าต่อไปและทำให้ปฏิบัติได้:

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

เพิ่มสิ่งต่อไปนี้ใน /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

ดังที่สตีเฟ่นกล่าวถึงในคำตอบของเขาคุณจะต้องเรียกใช้ vncserver อย่างน้อยที่สุดเท่าที่ผู้ใช้แต่ละคนที่คุณต้องการเข้าสู่ระบบเป็น ฉันใส่มันเข้าไปในหมวกเพราะถ้าคุณข้ามขั้นตอนนั้นไปมันจะไม่ทำงาน ดังนั้นในฐานะที่เป็นรากคุณสามารถทำ:

su justin -c vncserver
su bob -c vncserver

สิ่งนี้จะสร้างไดเรกทอรี. vnc ในผู้ใช้แต่ละคนที่บ้านด้วยสคริปต์เริ่มต้นที่เหมาะสม

ในที่สุดทำต่อไปนี้:

update-rc.d vncserver defaults 99

ตอนนี้คุณสามารถรีบูตหรือเริ่มบริการด้วยตนเองโดยพิมพ์:

service vncserver start

1
ใช้งานได้จริงสำหรับฉัน แต่สิ่งเดียวคือมันไม่ได้เริ่มโดยอัตโนมัติฉันคิดว่าเพราะอาจจะขอรหัสผ่านผู้ใช้ เนื่องจากมันถูกทริกเกอร์โดยอัตโนมัติฉันไม่เห็นมันถาม หากฉันเปิดใช้งานสคริปต์ด้วยตนเองระบบจะถามรหัสผ่านผู้ใช้ของฉัน ฉันจะแก้ไขสิ่งนี้ได้อย่างไร
droopie

1

ฉันเข้าถึง Ubuntu ของเพื่อนที่ฉันช่วยเหลือเพื่อติดตั้งหรือกำหนดค่าหรือสอนอะไรบางอย่าง
เนื่องจากฉันต้องการเข้าถึงอินเทอร์เน็ตผ่านโมเด็มฉันจึงใช้ vino
ตัวเลือกการแชร์และความปลอดภัยทั้งหมดจะเปิดในระหว่างการเข้าถึง
ฉันไม่ต้องการให้เซิร์ฟเวอร์ vino แอ็คทีฟอยู่ตลอดเวลา: ไม่เป็นไรมันไม่ดี
ฉันไม่มีระบบ> เมนูเดสก์ท็อประยะไกล
ฉันแก้ไข /usr/share/applications/vino-preferences.desktop ดังนี้:

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

ก่อนทำงานฉันขอให้เพื่อน ๆ เรียกใช้การตั้งค่าเดสก์ท็อประยะไกลและทำเครื่องหมายเปิดใช้งานการอนุญาต ...
เมื่อออกจากการกำหนดค่าตามความชอบเซิร์ฟเวอร์ vino จะเริ่มต้นและพวกเขาจะบอกที่อยู่ IP ให้ฉันใช้
เมื่องานเสร็จสิ้นแล้วพวกเขาจะเรียกใช้ค่ากำหนดอีกครั้งเพื่อทำเครื่องหมายปิดการอนุญาตการแชร์ ...
เมื่อออกจากการกำหนดค่าตามความชอบเซิร์ฟเวอร์ vino จะหยุดและจะหยุดแม้ว่าจะเริ่มต้นในสถานะปิดการใช้ร่วมกัน
ฉันพบว่าขั้นตอนนี้สะดวกมากและปลอดภัยที่สุดสำหรับผู้ใช้

PS: นักพัฒนาต้องการให้โปรแกรมของพวกเขาทำงานในพื้นที่ (ภายในเซสชันผู้ใช้) เพราะข้อผิดพลาดไม่สามารถส่งผลกระทบต่อระบบทั่วโลกในแบบนั้น


0

ใน Ubuntu 12.1 ฉันสามารถไปที่การตั้งค่าระบบ -> ผู้ใช้และเลือกผู้ใช้และตั้งค่า "เข้าสู่ระบบอัตโนมัติ -> เปิด"

จากนั้นฉันก็สามารถใช้ tightVNC เพื่อเข้าใช้โดยไม่ต้องลงชื่อเข้าใช้ในกล่อง

ทำงานได้ดีสำหรับกล่อง Ubuntu Linux หัวขาด


จากสิ่งที่ฉันสามารถรวบรวมคำถามคือเกี่ยวกับการเปิดเครื่อง vncserver เมื่อเริ่มต้นไม่ใช่เข้าสู่ระบบของผู้ใช้
Roman Luštrik

0

ฉันแนะนำให้ใช้ stephen jennings solution ด้วยหากคุณต้องการ vnc หลายอันสำหรับผู้ใช้ที่ต่างกันโดยเพียงแค่สร้าง vncserver_john หลายไฟล์ vncserver_bill, ... วิธีนี้ช่วยให้คุณสามารถเริ่ม / หยุดแยกได้ แน่นอนว่าแนวปฏิบัติการเขียนโปรแกรมที่ดีแนะนำให้ใส่รหัสทั่วไปให้กับผู้ใช้ทั้งหมดลงในไฟล์เดียวและแหล่งที่มาจากคนอื่น ๆ ทั้งหมด

ฉันมีความรับผิดชอบ "สืบทอด" สำหรับเซิร์ฟเวอร์ที่เพื่อนร่วมงานหลายคนทำการเขียนโปรแกรมทางวิทยาศาสตร์และประเมินข้อมูลทุกคนที่มี vnc แยกต่างหาก เซิร์ฟเวอร์ใช้งานได้จริงอย่างต่อเนื่องและเสถียรในช่วงหลายปีที่ผ่านมาและผู้ใช้ก็ขี้เกียจที่จะบันทึกหน้าต่างที่เปิดอยู่ อย่างไรก็ตามบางครั้ง vncservers หรือเซิร์ฟเวอร์ X11 บางครั้งก็ติดขัดและเป็นเรื่องที่น่ารำคาญอย่างมากที่ต้องปิดผู้ใช้ทั้งหมดเพื่อให้เซิร์ฟเวอร์หนึ่งตัวทำงานอีกครั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.