web-dev-qa-db-ja.com

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

UbuntuデスクトップをUbuntu 9.10 VPSサーバーにインストールしましたが、TightVNCを使用してサーバーに接続できます。ただし、このVPS上のVNCサーバーは、SSH経由でログインして次のコマンドを入力することによってのみ起動できます。

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

起動時またはスケジュールタスクとしてこのコマンドを実行すると、起動しません。私のオプションは何ですか?

31
Zero

Googleで「 buntu launch vnc server on startup "」を検索して これらの手順 を見つけました。

  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
30

より動的な構成と複数のユーザーの接続機能が必要な場合は、これを行うより良い方法があります。 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を実行する必要がありますATログインする各ユーザーとして少なくとも1回。この手順をスキップすると、どれも機能しないため、大文字で入力します。したがって、ルートとして次のことができます。

su justin -c vncserver
su bob -c vncserver

これにより、適切な起動スクリプトを使用して、各ユーザーのホームディレクトリに.vncディレクトリが作成されます。

最後に、以下を実行します。

update-rc.d vncserver defaults 99

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

service vncserver start
12
Justin Buser

私は、サポートしている友達の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アドレスが表示されます。
作業が完了すると、ユーザーは再度設定を実行して、共有許可をオフにします。
環境設定を終了すると、vino-serverが停止し、共有オフ状態で開始した場合でも停止します。
この手順は非常に便利であり、ユーザーにとって最も安全です。

PS:バグはグローバルシステムに影響を与えないため、開発者はプログラムをローカル(ユーザーセッション内)で実行することを好みます。

1
Papou

Ubuntu 12.1では、[システム設定]-> [ユーザー]に移動してユーザーを選択し、[自動ログイン]-> [オン]に設定できました。

その後、tightVNCを使用して、ボックス自体にログインせずにアクセスできました。

ヘッドレスUbuntu Linuxボックスでうまく機能

1
Jim

いくつかのvncserver_john、vncserver_bill、...ファイルを作成するだけで、ユーザーごとに複数のvncが必要な場合にも、stephen jenningsソリューションを使用することをお勧めします。これにより、個別に開始/停止できます。確かに、優れたプログラミング方法では、すべてのユーザーに共通のコードを1つのファイルにまとめ、他のすべてのユーザーからコードを入手することをお勧めします。

私は、複数の同僚が科学的なプログラミングとデータの評価を行うサーバーに対して「継承」の責任を負っています。サーバーは実際には何年にもわたって継続的に安定して動作し、ユーザーは開いているウィンドウを保存するのが面倒になります。ただし、単一のvncserversまたはX11サーバーがスタックする場合があり、すべてのユーザーをシャットダウンして1つのサーバーを再度実行するのは非常に厄介です。

0
Peter Steier