vncserverの代替

#contents

#navi(Sakura/VPS)

**概要 [#n009c1d5]
vncserverを使ったリモートデスクトップで、Drag and Dropができない。
ファイル・マネージャで Drag and Drop はあまり使わないので気にならなかったが、
Thunderbirdでのメールの振り分けなどもできないので調べて見ることにした。

-[[[ubuntu] Drag and Drop failing with VNC - Ubuntu Forums:http://ubuntuforums.org/showthread.php?t=1497635]] - Xvfb + x11vncで凌げということか
-[[Bug 620240 – GNOME Drag & Drop broken for remote X sessions:https://bugzilla.gnome.org/show_bug.cgi?id=620240]] - gtkのバグ?
-[[Bug #587856 in gtk+2.0 (Ubuntu): “GNOME Drag & Drop broken for remote X sessions”:https://bugs.launchpad.net/ubuntu/+source/gtk+2.0/+bug/587856]]

**Xvfbとの組み合わせ [#sce31b33]
X Virtual Frame Buffer を使えば、モニターの解像度とは関係なく画面の大きさを設定できる。

aptitude install xvfb して、下記のスクリプトで立ち上げに成功。
Drag & Drop もできるようになった。

 $ cat bin/xvfbvnc.sh
 #!/bin/sh
 
 unset SSH_AUTH_SOCK
 
 xvfb-run -n 1 -s "-screen 0 1280x1024x16" /etc/X11/Xsession &
 x11vnc -display WAIT:1 -rfbport 5901 -repeat -forever -shared -localhost -usepw -o ~/.x11vnc-errors &

-最初の実行の前に x11vnc -storepasswd としてパスワードを設定しておく
-起動したシェル(ssh ログイン)を終了(ログアウト)してもデスクトップは存在し続けるようだ
-デスクトップで「システム:ログアウト」を行うと、Xvfb と x11vnc はともに終了する

***問題点 [#xaa07370]
+後から接続してきた vncviewer に、先の接続を切断してつなぎ直すという動作ができない。
--dontdisconnect がデフォルトで有効なので切断しないようだ。このオプションを否定するオプションが見つからない
--暫定的に -shared をつけて、後から接続してきたら同時にアクセスできるようにする 
+キーリピートが効かない
--xset r on を3回唱えればリピートするようだ。なぜ3回?
 19/11/2011 00:49:16 Disabled X server key autorepeat.
 19/11/2011 00:49:16   to force back on run: 'xset r on' (3 times)
--xvfbvnc.sh の中では、xset r on を4回実行してもリピートは有効にならない
--x11vnc に -repeat オプションを付ければリピートするようになった
--別の遅いPCで -repeat オプションを付けて立ち上げた場合、重い処理で誤ってキーリピートが効いてしまうことがあるようだ。
x11vncのデフォルトでリピートをしないようにしているのは、このあたりの事情があるのかもしれない
+Chromeで右クリックするとメニューが出ずに新しいタブで開く
--Button Downした後、右に数ドット動いてから Button Upのイベントを送っているのではないか
--Firefoxではあまり気にならない
--Gnome Terminalで、キーボードフォーカスを与えるために本文中に左クリックすると、一行選択してしまう
+Drag & Drop 中にアイコンが変化しない
+vncserverと比べてフォントの扱いが変わった (フォント等が精細になった気がする)
+何か起動する度に Xlib:  extension "RANDR" missing on display ":1.0" といったエラーが出る
--Xvfb :1 +extension RANDR -screen 0 1280x1024x16 &  で起動してみたが効果なし
+xrdbが実行されない
+VPSでは問題ないが、実機にUSBでストレージを接続した際に自動でマウントされない

***コンソールのgdm [#ud051c59]
コンソールのgdmは不要なので削除したい。sudo mv /etc/X11/default-display-manager /etc/X11/default-display-manager.stopped として
起動しないようにしたつもりだが、起動してしまうようだ。

apt-get remove gdm としてみたところ、代わりに gdm3 がインストールされた。
この gdm3 も削除しようとすると、デスクトップ環境の殆どを削除すると言ってきたので gdm3 はそのままにして、再起動時は手動で sudo /etc/init.d/gdm3 stop することにした。

[2012/4/5] /etc/X11/default-display-manager の内容を /usr/sbin/gdm3 から /usr/sbin/nologin に変更すればコンソールのGUIは起動しなくなった。

***xrdb [#z525a359]
/etc/X11/Xsession.d/30x11-common_xresources にあるように、/etc/X11/Xresources/x11-common/ 下のファイルと、
$HOME/.Xresources を読み込んでから立ち上がるようになっており、コンソールの gdm からログインした場合は、設定されるのだが
なぜか xvfb-run から Xsession を起動した場合は読み込まれないようだ。

+xvfb-run の -w オプションで 10秒待つようにしてみたが解決しない
+/etc/X11/Xsession.d/28x11-common_debug_pause に、message "xrdb wait" と書いたファイルを置いておくと、
起動時 xrdb が読み込まれる前にメッセージ・ダイアログで止まるのだが、こうしておくとなぜか xrdb の読み込みはうまくいく
+いずれの場合でも、GNOMEパネルから起動したアプリケーションには設定が渡らない

**コンソール画面の転送 [#l42a2be5]
「SakuraのVPS」のコントロールパネルからJava Appletを使ってアクセスできるのだが、
SSHトンネルを使ってWindowsのvncviewerからもアクセスできるようにする。
SSHトンネルを使ってWindowsの[[vncviewer>Sakura/VPS/VNC Viewer]]からもアクセスできるようにする。

解像度が 800x600以上大きくなってくれない。xrandr コマンドでモニターの
解像度が調べられる。VPSなので実際のモニターにつながっているわけではない。
 $ xrandr
 xrandr: Failed to get size of gamma for output default
 Screen 0: minimum 640 x 480, current 800 x 600, maximum 800 x 600
 default connected 800x600+0+0 0mm x 0mm
    800x600        61.0* 
    640x480        60.0  
起動方法
 $ sudo vi /etc/X11/xorg.conf
 $ sudo /etc/init.d/gdm start
 $ sudo x11vnc -display :0 -rfbport 5901 -localhost -auth /var/lib/gdm/:0.Xauth
解像度が低すぎて、メニューからログアウトが実行できない。
vncviewerを切断すると x11vnc が終了するので、
 $ sudo /etc/init.d/gdm stop
とすれば止められる。

/etc/X11/xorg.conf: に以下のように足してみたが効果なし
 Section "Screen"
        Identifier      "Default Screen"
        Device          "Configured Video Device"
        Monitor         "Configured Monitor"
        DefaultDepth    24
        SubSection      "Display"
                Depth           24
                Modes           "1280x1024"
        EndSubSection
 EndSection
 
 Section "ServerLayout"
        Identifier      "Default Layout"
        Screen          "Default Screen"
        InputDevice     "Generic Keyboard"
        InputDevice     "Configured Mouse"
 EndSection

/var/log/Xorg.0.log を見ながら "Monitor" Section に何か書けばいいのかもしれない。

**Xvfbとの組み合わせ [#sce31b33]
X Virtual Frame Buffer を使えば、モニターの解像度とは関係なく画面の大きさを設定できる。

aptitude install xvfb して、下記のスクリプトで立ち上げに成功。
Drag & Drop もできるようになった。

 $ cat bin/xvfbvnc.sh
 #!/bin/sh
 
 unset SSH_AUTH_SOCK
 export DISPLAY=:1
 
 Xvfb :1 -screen 0 1280x1024x24 &
 sleep 2
 [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
 /etc/X11/Xsession &
 x11vnc -rfbport 5901 -forever -shared -localhost -usepw -o ~/.x11vnc-errors &

止めるときは、killall Xvfb でよい。
起動したシェル(ssh ログイン)を終了(ログアウト)してもデスクトップは存在し続けるようだ。

gdmは不要なので削除してもよいが、sudo mv /etc/X11/default-display-manager /etc/X11/default-display-manager.stopped として起動しないようにしたつもりだが、起動してしまう。

apt-get remove gdm としてみたところ、代わりに gdm3 がインストールされた。
この gdm3 も削除しようとすると、デスクトップ環境の殆どを削除すると言ってきたので gdm3 はそのままにして、再起動時は手動で sudo /etc/init.d/gdm3 stop することにした。

***問題点 [#xaa07370]
+後から接続してきた vncviewer に、先の接続を切断してつなぎ直すという動作ができない。
--dontdisconnect がデフォルトで有効なので切断しないようだ。このオプションを否定するオプションが見つからない
--暫定的に -shared をつけて、後から接続してきたら同時にアクセスできるようにする 
+キーリピートが効かない
--xset r on を3回唱えればリピートするようだ。なぜ3回?
 19/11/2011 00:49:16 Disabled X server key autorepeat.
 19/11/2011 00:49:16   to force back on run: 'xset r on' (3 times)
--xvfbvnc.sh の中では、xset r on を4回実行してもリピートは有効にならない
+Chromeで右クリックするとメニューが出ずに新しいタブで開く
--Button Downした後、右に数ドット動いてから Button Upのイベントを送っているのではないか
--Firefoxではあまり気にならない
--Gnome Terminalで、キーボードフォーカスを与えるために本文中に左クリックすると、一行選択してしまう
+Drag & Drop 中にアイコンが変化しない
+フォント等が精細になった気がする
+何か起動する度に Xlib:  extension "RANDR" missing on display ":1.0" といったエラーが出る
--Xvfb :1 +extension RANDR -screen 0 1280x1024x16 &  で起動してみたが効果なし


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS