ubuntu – 起動時にVNCサーバーを自動的に起動する

ubuntu vnc vncserver

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サーバー“と検索して見つけました

  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

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


タイトルとURLをコピーしました