我在 Ubuntu 9.10 VPS 服务器上安装了 Ubuntu 桌面,并且能够使用 TightVNC 连接到服务器。但是,此 VPS 上的 VNC 服务器只能通过 SSH 登录并输入以下命令才能启动:
vncserver :1 -geometry 800x600 -depth 16 -pixelformat rgb565
如果我在启动时或作为计划任务运行此命令,它将不会启动。我有什么选择?
答案1
我发现这些说明通过 Google 搜索“ubuntu 在启动时启动 vnc 服务器“。
- 安装 VNC 服务器。
vncserver
首次启动需要设置密码。- 添加以下文件
/etc/init.d/vncserver
(请务必根据您的喜好修改 USER、GEOMETRY、NAME 等)。 sudo chmod +x /etc/init.d/vncserver
sudo update-rc.d vncserver defaults
/etc/init.d/vnc服务器
#!/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
答案2
如果您想要更动态的配置和多个用户连接的能力,那么还有更好的方法。以 root 身份创建文件(如果不存在则创建目录)/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
正如 Stephen 在他的回答中提到的,您需要以每个要登录的用户身份至少运行一次 vncserver。我将其大写是因为如果您跳过该步骤,则一切都将不起作用。因此,作为 root 您可以执行以下操作:
su justin -c vncserver
su bob -c vncserver
这将在每个用户主目录中创建一个包含适当启动脚本的 .vnc 目录。
最后,执行以下操作:
update-rc.d vncserver defaults 99
现在您可以重新启动或者通过输入以下命令手动启动服务:
service vncserver start
答案3
在 Ubuntu 12.1 中,我可以进入系统设置->用户并选择一个用户并设置“自动登录->开启”
然后我就能够使用 tightVNC 进入,而无需登录到盒子本身。
适用于无头式 Ubuntu Linux 机器
答案4
如果您需要为不同用户提供多个 vnc,我建议也使用 stephen jennings 解决方案,只需创建多个 vncserver_john、vncserver_bill 等文件即可。这样您就可以分别启动/停止它们。当然,良好的编程习惯建议将所有用户通用的代码放入一个文件中,并从所有其他文件中获取它。
我“继承”了一台服务器的职责,几位同事在该服务器上进行一些科学编程和数据评估,每个人都使用单独的 VNC。该服务器实际上多年来一直稳定运行,用户懒得保存打开的窗口。但是,单个 VNC 服务器或 X11 服务器有时会卡住,关闭所有用户以让一台服务器再次运行是一件很麻烦的事。