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

私は、Googleで「起動時にubuntu launch vnc server on startup ](http://www.abdevelopment.ca/blog/start-vnc-server-ubuntu-boot)」と検索して、[ これらの指示 ](http://www.google.com/search?q=ubuntu%20launch%20vnc%20server%20on%20startup)を見つけました。

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

もし、より動的な設定をして、複数のユーザが接続できるようにしたいのであれば、これを行うより良い方法があります。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

これで各ユーザのホームディレクトリに適切な起動スクリプトを含む .vnc ディレクトリが作成されます。

service vncserver start

これで再起動するか、手動で次のように入力してサービスを開始することができます。

0x1&

と入力してください。

1
1
1
2015-06-28 01:18:17 +0000

お世話になっている友人のUbuntuにアクセスして、インストールや設定をしたり、何かを教えたりしています。
インターネットからモデム経由でアクセスする必要があるため、vinoを使用しています。
アクセス中はすべての共有オプションとセキュリティオプションをオンにしています。
vino-serverを常にアクティブにしておきたくない。
システム>リモートデスクトップメニューがなかった。
/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アドレスを教えてくれる。
作業が終わると、再びPreferenceを実行して、共有の許可…をオフにする。
環境設定を終了すると、vino-serverは停止し、たとえ共有オフの状態で起動していても停止してしまいます。
この手順は、ユーザーにとって最も安全であると同時に非常に便利だと思います。

PS: 開発者は自分のプログラムをローカル(ユーザセッション内)で実行することを好んでいます。

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

Ubuntu 12.1では、System Settings–Usersでユーザーを選択して、"Automatic Login–ON"

それから tightVNCを使って、ボックス自体にログインせずにログインすることができました。

ヘッドレスのubuntu linuxでも問題なく動作しました。

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

異なるユーザ用に複数の vnc が必要な場合は、複数の vncserverjohn, vncserverbill, … ファイルを作成するだけで、stephen jennings のソリューションを使うことをお勧めします。これにより、別々に起動/停止することができます。確かに、全てのユーザに共通のコードを一つのファイルに入れて、他のユーザからソースを取るのが良いプログラミングのやり方です。

私は、何人かの同僚が科学的なプログラミングやデータ評価を行っているサーバの責任を「継承」しています。このサーバは実際には何年も継続して安定して動作しており、ユーザは開いているウィンドウを保存することに怠惰になっています。しかし、単一の vncservers や X11 サーバがスタックしてしまうことがあり、1台のサーバを再び稼働させるためにすべてのユーザをシャットダウンするのは大迷惑です。

関連する質問

11
13
19
8
6