启动时自动启动VNC服务器


29

我在Ubuntu 9.10 VPS服务器上安装了Ubuntu桌面,并能够使用TightVNC连接到该服务器。但是,只能通过通过SSH登录并键入以下命令来启动此VPS上的VNC服务器:

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

如果我在启动时或作为计划任务运行此命令,它将无法启动。我有什么选择?


您是否试图弄清为什么它无法启动?
伊格纳西奥·巴斯克斯

Answers:


27

我通过在Google上搜索“ 启动时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

我收到以下错误输出gist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9e,我相信您的配置需要更新一些空白值。
niftylettuce

我的作品可行,但唯一的问题是它要求我输入密码才能首次启动脚本。由于其启动时,我不能输入它。我该如何解决?
droopie

@droopie您找到密码的解决方案了吗?

12

如果您想要更动态的配置以及可以连接多个用户的能力,那么有一种更好的方法。以超级用户身份创建文件(如果不存在,则创建目录)/ etc / sysconfig / vncservers,即:

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。我将其大写,因为如果您跳过该步骤,则将无法正常工作。因此,作为root您可以执行以下操作:

su justin -c vncserver
su bob -c vncserver

这将使用适当的启动脚本在每个用户的主目录中创建一个.vnc目录。

最后,执行以下操作:

update-rc.d vncserver defaults 99

现在,您可以键入以下命令来重新引导或手动启动服务:

service vncserver start

1
这实际上对我有用,但唯一的问题是我认为它并没有完全自动启动,因为它可能正在请求用户密码。由于它是自动触发的,因此我看不到它的要求。如果我手动启动该脚本,它将要求输入我的用户密码。我怎样才能解决这个问题?
droopie '18

1

我访问我帮助的朋友的Ubuntu,以安装或配置或教他们一些知识。
由于需要通过调制解调器从Internet访问,因此我使用了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-server启动,他们告诉我要使用的IP地址。
工作完成后,他们再次运行“首选项”以选中“共享允许...”。
退出“首选项”时,vino服务器将停止,并且即使在“共享关闭”状态下启动也会停止。
我发现此过程非常方便,而且对用户来说最安全。

PS:开发人员希望其程序在本地(在用户会话内)运行,因为错误不会以这种方式影响全局系统。


0

在Ubuntu 12.1中,我能够进入“系统设置”->“用户”并选择一个用户并设置“自动登录”->“开启”

然后,我可以使用tightVNC进入而无需登录到盒子本身。

对于无头的ubuntu linux盒子运行良好


据我所知,问题是关于在启动时启动vncserver,而不是用户登录。
罗曼·卢茨崔克(RomanLuštrik)

0

如果您需要针对不同用户的多个vnc,我建议也使用stephen jennings解决方案,只需创建多个vncserver_john,vncserver_bill,...文件即可。这使您可以分别启动/停止它们。当然,良好的编程习惯建议将所有用户通用的代码放入一个文件,并从其他所有文件中获取。

我对服务器负有“继承性”的责任,其中几个同事进行一些科学的编程和数据评估,每个人都有一个单独的vnc。该服务器实际上可以连续多年稳定运行,并且用户变得懒惰以保存其打开的窗口。但是,单个vncserver或X11服务器有时会卡住,并且关闭所有用户以使一台服务器再次运行是一个很大的麻烦。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.