Ubuntu 9.10のVPSサーバにUbuntuデスクトップをインストールし、TightVNCを使ってサーバに接続できています。しかし、このVPS上のVNCサーバはSSHでログインして以下のコマンドを入力しないと起動できません
vncserver :1 -geometry 800x600 -depth 16 -pixelformat rgb565
起動時やスケジュールタスクとしてこのコマンドを実行しても起動しません。どうすればいいのでしょうか?
32 Zero 2010-05-31
私はこれらの指示を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/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
32 Stephen Jennings 2010-05-31
もし、より動的な設定をして、複数のユーザが接続できるようにしたいのであれば、これを行うより良い方法があります。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"
次に空の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
12 Justin Buser 2012-05-05
Ubuntu 12.1では、私はシステム設定->Usersに入り、ユーザーを選択し、”Automatic Login->ON “を設定することができました
その後、tightVNCを使って、箱自体にログインせずに入ることができました
ヘッドレスのubuntu linuxボックスのためにうまく動作しました
1 Jim 2013-10-26
私は、インストールまたは設定したり、何かを教えるために、私が助ける友人のUbuntuにアクセスします。 私はモデムを介してインターネットからアクセスする必要があるので、私はvinoを使用しています。 アクセス中は、すべての共有とセキュリティオプションがオンになっています。 私はvino-serverが常にアクティブであることを望んでいません:それはそれが自動起動しないだけで良いのです。 私は、System>Remote Desktopメニューを持っていませんでした。 /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-server は停止し、たとえ Sharing off の状態で起動していても停止してしまいます。 この手順は、ユーザーにとって最も安全であると同時に、非常に便利だと思います
追記: 開発者は、バグがグローバルシステムに影響を与えることができないため、プログラムはローカルで (ユーザセッション内で) 実行されることを好みます
1 Papou 2015-06-28
異なるユーザ用に複数の vnc が必要な場合は、複数の vncserver_john, vncserver_bill, … ファイルを作成するだけで、stephen jennings のソリューションを使用することをお勧めします。これにより、別々に起動/停止することができます。確かに、良いプログラミングの実践では、全てのユーザに共通のコードを一つのファイルにまとめ、他の全てのユーザからソースを取ることを提案しています
私は、数人の同僚が科学的なプログラミングやデータ評価を行っているサーバの責任を「継承」しています。このサーバは実際には何年にもわたって継続して安定して動作しており、ユーザは開いているウィンドウを保存するのが面倒になってきました。しかし、単一の vncservers や X11 サーバがスタックしてしまうことがあり、あるサーバを再び稼働させるためにすべてのユーザをシャットダウンするのは大迷惑です
0 Peter Steier 2017-01-06