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


29

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

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

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


なぜ起動しないのか理解しようとしましたか?
イグナシオバスケス-アブラムス

回答:


27

Googleで「起動時にubuntu launch vnc server」を検索して、これらの手順を見つけました。

  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

次のエラー出力が表示されていますgist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9e、いくつかの空の値で構成を更新する必要があると思います。
-niftylettuce

私の作品は動作しますが、唯一の問題は、初めてスクリプトを開始するためにパスワードを入力するように要求することです。起動時に入力できないので。どうすれば修正できますか?
droopie

@droopieパスワードの解決策を見つけましたか?
ベン

12

より動的な構成と複数のユーザーに接続する機能が必要な場合は、これを行うより良い方法があります。ルートとしてファイル(および存在しない場合はディレクトリ)/ 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を最低1回実行する必要があります。そのステップをスキップすると、どれも機能しないので、私はそれをキャップに入れました。したがって、rootでできること:

su justin -c vncserver
su bob -c vncserver

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

最後に、次を実行します。

update-rc.d vncserver defaults 99

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

service vncserver start

1
これは実際に私のために機能しますが、唯一のことは、ユーザーパスワードを要求している可能性があるため、自動的に起動しないことです。自動的にトリガーされるので、それを要求するのがわかりません。スクリプトを手動で起動すると、ユーザーのパスワードを要求されます。どうすれば修正できますか?
droopie

1

私が助けたり、インストールしたり、設定したり、何かを教えるために友人の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アドレスが通知されます。
作業が終了すると、Preferencesを再度実行して、共有許可...をオフにします。
環境設定を終了すると、vino-serverは停止し、共有オフ状態で起動した場合でも停止します。
この手順は非常に便利であり、ユーザーにとって最も安全であると思います。

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


0

Ubuntu 12.1では、システム設定->ユーザーに移動してユーザーを選択し、「自動ログイン->オン」を設定することができました

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

ヘッドレスubuntu Linuxボックスでうまく機能しました


私が収集できるものから、質問はユーザーのログインではなく、起動時にvncserverの電源を入れることです。
ロマンルシュトリック

0

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.