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

启动时自动启动VNC服务器

我在Ubuntu 9.10 VPS服务器上安装了Ubuntu桌面,并且能够使用TightVNC连接到服务器。然而,这个VPS上的VNC服务器只能通过SSH登录并输入以下命令来启动。

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

如果我在启动时运行这个命令或者作为一个计划任务,它就不能启动。我有什么选择?

答案 (5)

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

我在谷歌搜索ubuntu启动vnc服务器发现了这些说明“。

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
``` 5.
12
12
12
2012-05-05 21:34:45 +0000

如果你想要一个更动态的配置,并且能够为多个用户连接,那么有一个更好的方法。以root身份创建文件(如果不存在的话,也可以创建目录)/etc/sysconfig/vncservers,即do:

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"

接下来创建一个空的init脚本并使其可执行。

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

正如Stephen在他的回答中提到的,你需要至少以每个你想登录的用户的身份运行vncserver一次。我把这句话加粗是因为如果你跳过了这一步,所有的操作都不会成功。所以,作为root用户,你可以这样做。

su justin -c vncserver
su bob -c vncserver

这将在每个用户的主目录下创建一个.vnc目录,并添加相应的启动脚本。

最后,执行以下操作。

update-rc.d vncserver defaults 99

现在你可以重启或手动启动服务,输入:

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

我访问我帮助的朋友的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-server停止,即使在Sharing off状态下启动也会停止。
我觉得这个过程对用户来说非常方便,也是最安全的。

PS: 开发者更希望他们的程序在本地运行(在用户会话中),因为一个错误不能影响全局系统。

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

在Ubuntu 12.1中,我可以进入系统设置–>用户,选择一个用户,并设置 “自动登录–>开 ”

然后我就可以使用紧缩VNC进入,而不用登录到盒子本身。

对于无头的ubuntu linux盒子来说,效果不错。

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

我建议使用Stephen Jennings的解决方案,如果你需要为不同的用户创建几个vncserverjohn, vncserverbill, … 文件。这样你就可以分别启动/停止它们。当然,良好的编程实践建议将所有用户的通用代码放在一个文件中,并从其他所有文件中获取源代码。

我 “继承 "了一个服务器的责任,几个同事在那里做一些科学编程和数据评估,每个人都有一个单独的vnc。其实这台服务器连续稳定运行多年,用户也就懒得保存自己打开的窗口了。但是,单台vncservers或者X11服务器有时会出现卡顿的情况,要关闭所有用户才能让一台服务器重新运行,这是一个很大的麻烦。