Tự động khởi động máy chủ VNC khi khởi động


29

Tôi đã cài đặt máy tính để bàn Ubuntu trên máy chủ VPS Ubuntu 9.10 và có thể kết nối với máy chủ bằng cách sử dụng TightVNC. Tuy nhiên, máy chủ VNC trên VPS này chỉ có thể được khởi động bằng cách đăng nhập thông qua SSH và gõ lệnh sau:

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

Nếu tôi chạy lệnh này khi khởi động hoặc như một nhiệm vụ lịch trình, nó sẽ không bắt đầu. Những lựa chọn của tôi là gì?


Bạn đã cố gắng tìm hiểu tại sao nó sẽ không bắt đầu?
Ignacio Vazquez-Abrams

Câu trả lời:


27

Tôi đã tìm thấy các hướng dẫn này bằng cách tìm kiếm Google cho " máy chủ vnc khởi chạy Ubuntu khi khởi động ".

  1. Cài đặt máy chủ VNC.
  2. Khởi chạy vncserverlần đầu tiên để thiết lập mật khẩu.
  3. Thêm tệp sau đây dưới dạng /etc/init.d/vncserver(đảm bảo sửa đổi NGƯỜI DÙNG, GEOMETRY, NAME, v.v. theo ý thích của bạn).
  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

Tôi nhận được đầu ra lỗi sau gist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9e , tôi tin rằng cấu hình của bạn cần được cập nhật với một số giá trị trống.
niftylettuce

Của tôi hoạt động nhưng vấn đề duy nhất là nó yêu cầu tôi nhập mật khẩu để bắt đầu tập lệnh lần đầu tiên. Kể từ khi khởi động, tôi không thể nhập nó. Làm thế nào tôi có thể sửa chữa nó?
droopie

@droopie bạn đã tìm được giải pháp cho mật khẩu chưa?
Ben

12

Nếu bạn muốn có một cấu hình năng động hơn và khả năng kết nối cho nhiều người dùng thì có một cách tốt hơn để làm điều này. Khi root tạo tập tin (và thư mục nếu nó không tồn tại) / etc / sysconfig / vncservers tức là:

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

Thêm máy chủ khi cần cho mỗi người dùng bằng cách thêm một cái gì đó như sau vào tệp vncservers.conf bạn vừa tạo:

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

tiếp theo tạo một tập lệnh init trống và làm cho nó có thể thực thi được:

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

thêm phần sau vào /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

Như Stephen đã đề cập trong câu trả lời của mình, bạn sẽ cần chạy vncserver TẠI LEAST ONCE NHƯ MACHI NGƯỜI DÙNG mà bạn muốn đăng nhập. Tôi đặt nó trong mũ vì nếu bạn bỏ qua bước đó thì không cái nào hoạt động cả. Vì vậy, như root bạn có thể làm:

su justin -c vncserver
su bob -c vncserver

Điều này sẽ tạo một thư mục .vnc trong mỗi thư mục nhà của người dùng với các tập lệnh khởi động thích hợp.

Cuối cùng, làm như sau:

update-rc.d vncserver defaults 99

bây giờ bạn có thể khởi động lại hoặc khởi động dịch vụ bằng cách gõ:

service vncserver start

1
Điều này thực sự hiệu quả với tôi nhưng điều duy nhất là nó không tự động khởi động nó tôi nghĩ bởi vì nó có thể đang yêu cầu mật khẩu người dùng. kể từ khi nó tự động kích hoạt, tôi không thấy nó yêu cầu nó. nếu tôi tự khởi chạy tập lệnh, nó sẽ hỏi mật khẩu người dùng của tôi. Làm thế nào tôi có thể sửa lỗi này?
droopie

1

Tôi truy cập Ubuntu của những người bạn tôi giúp đỡ, để cài đặt hoặc định cấu hình hoặc để dạy họ điều gì đó.
Khi tôi cần truy cập từ Internet thông qua modem, tôi sử dụng vino.
Tất cả các tùy chọn chia sẻ và bảo mật được bật trong khi truy cập.
Tôi không muốn máy chủ vino hoạt động mọi lúc: thật tốt khi nó không tự khởi động.
Tôi không có menu System> Remote Desktop.
Tôi đã chỉnh sửa /usr/share/appluggest/vino-preferences.desktop như sau:

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

Trước khi làm việc, tôi yêu cầu bạn bè chạy Tùy chọn máy tính từ xa và đánh dấu vào Chia sẻ cho phép ... bật.
Khi thoát Tùy chọn, máy chủ vino bắt đầu và họ cho tôi biết địa chỉ IP sẽ sử dụng.
Khi công việc kết thúc, họ lại chạy Tùy chọn để đánh dấu Chia sẻ Cho phép ... tắt.
Khi thoát Tùy chọn, máy chủ vino dừng và sẽ dừng ngay cả khi đã bắt đầu ở trạng thái Chia sẻ tắt.
Tôi thấy thủ tục này rất thuận tiện cũng như an toàn nhất cho người dùng.

PS: nhà phát triển thích chương trình của họ chạy cục bộ (trong phiên người dùng) vì lỗi có thể ảnh hưởng đến hệ thống toàn cầu theo cách đó.


0

Trong Ubuntu 12.1, tôi đã có thể vào Cài đặt hệ thống-> Người dùng và chọn người dùng và đặt "Đăng nhập tự động-> BẬT"

Sau đó, tôi đã có thể sử dụng chặt chẽ VNC để vào mà không cần đăng nhập vào hộp.

Hoạt động tốt cho hộp linux không đầu Ubuntu


Từ những gì tôi có thể thu thập, câu hỏi là về việc tăng sức mạnh cho vncserver khi khởi động, chứ không phải đăng nhập của người dùng.
Roman Luštrik

0

Tôi cũng khuyên bạn nên sử dụng giải pháp jennings stephen nếu bạn cần một số vnc cho những người dùng khác nhau, bằng cách chỉ tạo một số tệp vncserver_john, vncserver_bill, .... Điều này cho phép bạn bắt đầu / dừng chúng một cách riêng biệt. Chắc chắn, thực hành lập trình tốt đề nghị đặt mã chung cho tất cả người dùng vào một tệp và lấy mã từ tất cả những người khác.

Tôi đã "kế thừa" trách nhiệm đối với một máy chủ nơi một số đồng nghiệp thực hiện một số đánh giá dữ liệu và lập trình khoa học, mọi người đều có một vnc riêng. Máy chủ thực sự chạy liên tục và ổn định qua nhiều năm và người dùng trở nên lười biếng khi lưu các cửa sổ đang mở. Tuy nhiên, đôi khi các máy chủ vncservers hoặc X11 bị kẹt và điều này gây phiền toái lớn cho việc tắt tất cả người dùng để khiến một máy chủ chạy lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.