Windows 上の X11サーバ VcXsrvで遊んでみる (sshによるX11Forward)
tag: vcxsrv, ssh, freebsd, x11, xauth
前回の続き。
Windows用のVcXsrv( X Windows System )をもうちょっと使ってみる。
sshコマンドには、 -X や -Y という謎のオプションがある。X11Forwarding 関連のオプション。
Windows 10マシンから、ssh -X george@FreeBSDマシン とやった端末にて xclock & とかすると、FreeBSD側で起動した時計の画面がWindowsマシンに飛んでくるという仕込みができる。
前回は家庭内LANにあるFreeBSDマシンだったのでDISPLAY環境変数を直接Windowsマシンに設定していたが、 sshコマンドによる転送でもX11画面を飛ばせるわけだ。
つまり、AWSなどクラウド上にあるLinux仮想マシンからでもssh経由でX11画面をWindowsマシンに飛ばせるようになる。
■FreeBSD側/Linux側の設定(sshd)
/etc/ssh/sshd_config
X11Forwarding yes X11DisplayOffset 10 X11UseLocalhost no
■Windows側の設定(ssh)
~/.ssh/config
Host * ForwardX11 yes ForwardX11Trusted yes
■WindowsからFreeBSD側にssh -v -Yしてみる。
ssh -v -Y freebsd59
以下のようなデバッグログが出る。
debug1: No xauth program. Warning: untrusted X11 forwarding setup failed: xauth key data not generated
「debug1: No xauth program.」と出た場合は、sshクライアント側(Windows側)でxauthコマンドが無い、という意味らしい。
■Windows側の設定(ssh)(改)
~/.ssh/config
Host * ForwardAgent yes ForwardX11 yes ForwardX11Trusted yes XAuthLocation "C:/Program Files/VcXsrv/xauth.exe"
XAuthLocation指定でxauth.exeの場所を教えてあげれば、「debug1: No xauth program.」は出なくなった。けど動かないw
■Windows側の設定(ssh)(改2)
~/.ssh/config
Host * ForwardAgent yes ForwardX11 yes ForwardX11Trusted yes XAuthLocation /usr/bin/xauth
その他作業。
■VcXsrv起動シェル(Windows側)
xauthを使うなら、vcxsrvの起動オプションに -auth ファイル名 は指定しないとダメ。
以下のようなシェルを使って VcXsrvを起動する。( debianの /usr/bin/startx を参考に作ってみた )
vcxsrv のオプションで -ac を指定するとアクセス制御制限を無効にする。xauthを使うなら、 -ac ナシで。
シェルでは、Xサーバ起動時に mcookieコマンドで乱数を生成して、 サーバ用の認証ファイル(/tmp/serverauth.XXXXXXXXXX)と、ユーザー用の認証ファイル(~/.Xauthority)にそれぞれxauthコマンドで追加している。
VcXsrv由来のxauthコマンドでは、 xauth add kabylakes:0 MIT-MAGIC-COOKIE-1 aabbccddeeffxxxx とやると、なぜか IPv6アドレスにしかクッキーが付かないので、IPv4アドレスは別途明示的に追加している。
#!/bin/bash # # VcXsrv起動 # function f-startx() { # vcxsrv -auth ~/.Xauthority -background none -multiwindow -ac DEFAULT_IPV4_ADDR=192.168.1.35 DISPLAY=${DEFAULT_IPV4_ADDR}:0.0 export DISPLAY XAUTHORITY=$HOME/.Xauthority export XAUTHORITY # initialize xauth dummy=0 mcookie=`mcookie` if [ -z "$mcookie" ]; then echo "mcookie failed. abort." return 1 fi xserverauthfile=`mktemp --tmpdir serverauth.XXXXXXXXXX` xauth -f "$xserverauthfile" add :$dummy MIT-MAGIC-COOKIE-1 $mcookie xauth -f "$xserverauthfile" add ${DEFAULT_IPV4_ADDR}:$dummy MIT-MAGIC-COOKIE-1 $mcookie xauth add ${DEFAULT_IPV4_ADDR}:$dummy MIT-MAGIC-COOKIE-1 $mcookie hostname=`hostname` authdisplay=":0" # now add the same credentials to the client authority file # if '$displayname' already exists do not overwrite it as another # server may need it. Add them to the '$xserverauthfile' instead. for displayname in $authdisplay $hostname$authdisplay do authcookie=`xauth -n list "$displayname" | sed -n "s/.*$displayname[[:space:]*].*[[:space:]*]//p" | sort | uniq ` 2>/dev/null; if [ "z${authcookie}" = "z" ] ; then xauth add $displayname MIT-MAGIC-COOKIE-1 $mcookie removelist="$displayname $removelist" else dummy=$(($dummy+1)); xauth -f "$xserverauthfile" add :$dummy MIT-MAGIC-COOKIE-1 $authcookie xauth -f "$xserverauthfile" add ${DEFAULT_IPV4_ADDR}:$dummy MIT-MAGIC-COOKIE-1 $authcookie fi done echo "" echo "" echo "X11 server side xauth list" xauth -f "$xserverauthfile" -n list echo "" echo "" echo "" echo "X11 user side xauth list" xauth -n list echo "" # start X server # vcxsrv -auth $xserverauthfile -background none -multiwindow -ac vcxsrv -auth $xserverauthfile -background none -multiwindow # after X server end, remove authfile /bin/rm $xserverauthfile } f-startx "$@" # # End of File #
■sshコマンドはなぜxauthを使おうとするのか
xauthは、X11サーバが画面表示受け付けする際のマジッククッキーの表示や登録を行う。
IPアドレス、MIT-MAGIC-COOKIE-1、共通の16進数のマジッククッキー(乱数)をX11サーバ側&クライアント側の両方が持っていれば、X11画面飛ばしを受け入れるという共通秘密鍵みたいなモノ。
george@KabyLakeS ~ $ xauth -n list 192.168.1.35:0 MIT-MAGIC-COOKIE-1 123412341234abcdabcdabcd12341234 george@KabyLakeS ~ $
george@freebsd59 ~ $ xauth -n list 192.168.1.35:0 MIT-MAGIC-COOKIE-1 123412341234abcdabcdabcd12341234 george@freebsd59 ~ $
sshコマンドがX11転送を行う場合、xauthコマンドを使ってX11サーバ側(Winodws側)から情報を取得し、xauthコマンドを使ってX11クライアント側(FreeBSD側)で登録をしようとするらしい。
なので、xauthコマンドはX11サーバ側(Winodws側)、X11クライアント側(FreeBSD側)の両方で必要。
■ssh with X11画面転送 が成功した場合の例
ssh -v -Y raspi4 した後、xhostコマンドで確認。
「access control enabled, only authorized clients can connect」と表示されていれば xauth によるアクセス制御が有効な状態。
pi@raspi4:~ $ xhost debug1: client_input_channel_open: ctype x11 rchan 3 win 65536 max 16384 debug1: client_request_x11: request from ::1 35996 debug1: channel 1: new [x11] debug1: confirm x11 access control enabled, only authorized clients can connect INET:0.0.0.0 INET6:localhost debug1: channel 1: FORCE input drain debug1: channel 1: free: x11, nchannels 2 pi@raspi4:~ $
■sshのconfigに書いたForwardX11Trusted yesとは何か
manページの記述があいまいなので、何を言っているのかよくわからんが...。
sshの向こう側のクライアントをX11のtrustedクライアント扱いする、という意味のようだ。
ssh -Y と同等なのかな?
■sshのconfigによく書かれているForwardAgent yesとは何か
sshでホスト多段踏みを行う際にssh-agent情報を転送する場合にyesとする。
みんな書いてるけどX11画面転送には関係ないww
■xauthコマンド使用の通常手順(手作業)の流れ(参考)
環境変数DISPLAYが設定されている状態で、X11サーバ側(Windows側)でxauth generateコマンドを発行。
相手側(FreeBSD側)では、xauth nmergeとして、16進数のマジック(乱数)を~/.Xauthorityファイルに保存する。
これで両者は共通の秘密の乱数を持つことになり、FreeBSD機にログイン中の他のユーザーからX11画面にイタズラできなくなる、という寸法。
xhostだとホスト名(IPアドレス)が許可基準だったので、同じマシンにログインしている別のユーザーからも画面を飛ばせるため、こうなっているものと思われる。
ssh -X を行うと、手作業で行っていた以下の手順(に似た何か)は自動的に実行される。
# X server 側 (Windows) で実施。今回は実験のため毎回ファイルは消している。 if [ ! -f ~/.Xauthority ] ; then touch ~/.Xauthority else rm ~/.Xauthority touch ~/.Xauthority fi xauth.exe generate 192.168.1.35:0.0 MIT-MAGIC-COOKIE-1 trusted # 作成された内容を確認 xauth.exe -n list # xauth nlistで送信される内容の確認。(nlistで表示すると内容は16進数の呪文みたいになる。この形式でないとマージできない。) xauth.exe nlist # xauth nlist の内容を宛先マシンに送る。 相手のマシンでは、 xauth nmerge としてマージする。 xauth.exe nlist | ssh freebsd59 xauth nmerge - # ここで、~/.Xauthority ファイルを指定して Xサーバを起動。 vcxsrv -auth ~/.Xauthority -background none -multiwindow # お互い秘密のクッキーを共有しているので、相手のマシンで環境変数DISPLAYを192.168.1.35:0.0にしてからxclockを起動するとX11画面が飛んでくる。 # FreeBSD機側で操作 export DISPLAY=192.68.1.35:0.0 xclock &
■MobaXtermによるX11画面飛ばし
MobaXtermは、X11サーバーを内蔵している。(MobaXterm起動時についでにX11サーバーも起動する)
こちらはcygwin系のコマンド一式を標準装備していて、xauthコマンドも/bin/xauthとして存在する。
MobaXtermでSSH接続すると、xauthを使った許可設定を内部で自動的にしているようで、xauth -n listすると、MobaXterm用のマジッククッキーが登録されているのが見える。
というわけで、SSH端末からemacsとか起動すると画面がWindows側に飛んでくる。
面倒な設定が不要なあたり、利便性は高い。
VcXsrvの起動オプション
tag: vcxsrv, x11, xauth
xauthを使うなら、vcxsrvの起動オプションに -auth ファイル名 は指定しないとダメか。
vcxsrv 起動オプションの末尾の -ac はX11サーバのアクセス制御をオフにするオプション。
以下参考。VcXsrvのヘルプ内容。
george@KabyLakeS ~ $ vcxsrv.exe -? Welcome to the VcXsrv X Server Vendor: The VcXsrv Project Release: 1.20.8.1 OS: Windows NT 6.2 build 9200 (64-bit) Contact: marha@users.sourceforge.net Unrecognized option: -? Usage... Vcxsrv [:<display>] [option] :display-number Vcxsrv runs as the given display-number, which defaults to 0. To run multiple instances, use unique display-numbers. -silent-dup-error Do not show fatal exit error mesage box -a # default pointer acceleration (factor) -ac disable access control restrictions -audit int set audit trail level -auth file select authorization file -br create root window with black background +bs enable any backing store support -bs disable any backing store support -cc int default color visual class -nocursor disable the cursor -core generate core dump on fatal error -displayfd fd file descriptor to write display number to when ready to connect -dpi [auto|int] screen resolution set to native or this dpi -dpms disables VESA DPMS monitor control -deferglyphs [none|all|16] defer loading of [no|all|16-bit] glyphs -f # bell base (0-100) -fp string default font path -help prints message with these options +iglx Allow creating indirect GLX contexts (default) -iglx Prohibit creating indirect GLX contexts -I ignore all remaining arguments -maxclients n set maximum number of clients (power of two) -nolisten string don't listen on protocol -listen string listen on protocol -noreset don't reset after last client exists -background [none] create root window with no background -reset reset after last client exists -pn accept failure to listen on all ports -nopn reject failure to listen on all ports -r turns off auto-repeat r turns on auto-repeat -render [default|mono|gray|color] set render color alloc policy -retro start with classic stipple -seat string seat to run on -t # default pointer threshold (pixels/t) -terminate terminate at server reset -tst disable testing extensions -wr create root window with white background +xinerama Enable XINERAMA extension -xinerama Disable XINERAMA extension -dumbSched Disable smart scheduling and threaded input, enable old behavior -schedInterval int Set scheduler interval in msec +extension name Enable extension -extension name Disable extension -query host-name contact named host for XDMCP -broadcast broadcast for XDMCP -multicast [addr [hops]] IPv6 multicast for XDMCP -indirect host-name contact named host for indirect XDMCP -port port-num UDP port number to send messages to -from local-address specify the local address to connect from -once Terminate server after one session -class display-class specify display class to send in manage -cookie xdm-auth-bits specify the magic cookie for XDMCP -displayID display-id manufacturer display ID for request [+-]accessx [ timeout [ timeout_mask [ feedback [ options_mask] ] ] ] enable/disable accessx key sequences VcXsrv Device Dependent Usage: -[no]clipboard Enable [disable] the clipboard integration. Default is enabled. -noprimary Do not map the PRIMARY selection to the windows clipboard. The CLIPBOARD selection is always mapped if -clipboard is enabled. Default is mapped. -clipupdates num_boxes Use a clipping region to constrain shadow update blits to the updated region when num_boxes, or more, are in the updated region. Diminished effect on current Windows versions because they already group GDI operations together in a batch, which has a similar effect. -[no]compositewm Enable [Disable] Composite extension. Default is enabled. Used in -multiwindow mode. Use Composite extension redirection to maintain a bitmap image of each top-level X window, so window contents which are occluded show correctly in Taskbar and Task Switcher previews. -[no]compositealpha X windows with per-pixel alpha are composited into the Windows desktop. -[no]compositewm Use the Composite extension to keep a bitmap image of each top-level X window, so window contents which are occluded show correctly in task bar and task switcher previews. -depth bits_per_pixel Specify an optional bitdepth to use in fullscreen mode with a DirectDraw engine. -[no]emulate3buttons [timeout] Emulate 3 button mouse with an optional timeout in milliseconds. -engine engine_type_id Override the server's automatically selected engine type: 1 - Shadow GDI 4 - Shadow DirectDraw4 Non-Locking -fullscreen Run the server in fullscreen mode. -[no]hostintitle In multiwindow mode, add remote host names to window titles. -icon icon_specifier Set screen window icon in windowed mode. -ignoreinput Ignore keyboard and mouse input. -[no]keyhook Grab special Windows keypresses like Alt-Tab or the Menu key. -lesspointer Hide the windows mouse pointer when it is over any VcXsrv window. This prevents ghost cursors appearing when the Windows cursor is drawn on top of the X cursor -logfile filename Write log messages to <filename>. -logverbose verbosity Set the verbosity of log messages. [NOTE: Only a few messages respect the settings yet] 0 - only print fatal error. 1 - print additional configuration information. 2 - print additional runtime information [default]. 3 - print debugging and tracing information. -[no]multimonitors or -[no]multiplemonitors Use the entire virtual screen if multiple monitors are present. -multiwindow Run the server in multiwindow mode. Not to be used together with -rootless or -fullscreen. -nodecoration Do not draw a window border, title bar, etc. Windowed mode only i.e. ignored when -fullscreen specified. -nounicodeclipboard Disable Unicode in the clipboard. -[no]primary When clipboard integration is enabled, map the X11 PRIMARY selection to the Windows clipboard. Default is enabled. -refresh rate_in_Hz Specify an optional refresh rate to use in fullscreen mode with a DirectDraw engine. -resize=none|scrollbars|randr In windowed mode, [don't] allow resizing of the window. 'scrollbars' mode gives the window scrollbars as needed, 'randr' mode uses the RANR extension to resize the X screen. 'randr' is the default. -rootless Use a transparent root window with an external window manager (such as openbox). Not to be used with -multiwindow or with -fullscreen. -screen scr_num [width height [x y] | [[WxH[+X+Y]][@m]] ] Enable screen scr_num and optionally specify a width and height and initial position for that screen. Additionally a monitor number can be specified to start the server on, at which point, all coordinates become relative to that monitor. Examples: -screen 0 800x600+100+100@2 ; 2nd monitor offset 100,100 size 800x600 -screen 0 1024x768@3 ; 3rd monitor size 1024x768 -screen 0 @1 ; on 1st monitor using its full resolution (the default) -swcursor Disable the usage of the Windows cursor and use the X11 software cursor instead. -[no]trayicon Do not create a notification area icon. Default is to create one icon per screen. You can globally disable notification area icons with -notrayicon, then enable them for specific screens with -trayicon for those screens. -[no]unixkill Ctrl-Alt-Backspace exits the X Server. The Ctrl-Alt-Backspace key combo is disabled by default. -[no]wgl Enable the GLX extension to use the native Windows WGL interface for hardware-accelerated OpenGL -swrastwgl Enable the GLX extension to use the native Windows WGL interface based on the swrast interface for accelerated OpenGL -[no]winkill Alt+F4 exits the X Server. -xkblayout XKBLayout Set the layout to use for XKB. This defaults to a layout matching your current layout from Windows or us (i.e. USA) if no matching layout was found. For example: -xkblayout de -xkbmodel XKBModel Set the model to use for XKB. This defaults to pc105. -xkboptions XKBOptions Set the options to use for XKB. This defaults to not set. -xkbrules XKBRules Set the rules to use for XKB. This defaults to xorg. -xkbvariant XKBVariant Set the variant to use for XKB. This defaults to not set. For example: -xkbvariant nodeadkeys george@KabyLakeS ~ $
すかいらーくの宅配
ファミレス業界も宅配に力を入れているようで、宅配始めましたみたいなチラシが入ってた。
スマホからQRコードを読み込んでWebサイトにアクセス。
割と近代的なWeb型ECサイトが作られてて使いやすかった。やるなぁ。
とりあえず注文してみるテスト。
p.s.
お。ちゃんと届いたww わりと好印象。
「緊急事態宣言」延長を正式決定 31日まで
tag: 武漢肺炎
うーん。大事になってきたなぁ。
ソフトバンク光やNTTで大規模な通信障害発生か?「繋がらない」の声相次ぐ
ソフトバンク光の場合はDNSが落ちてるっぽいので 8.8.8.8 にすると色々使えるとかなんとか。
地震もあったし色々あるなぁ。
GW終わったー
今年は完全な引きこもりだったw
市内から一歩も出てないゾ
休み中の成果はUbuntu 20.04 LTS が出たのでvagrant上でちと環境整えてみたのと、MSYS2 + VcXsrv + ssh -Y で画面飛ばしの準備したくらいかな。
Raspberry Pi 4 3号機のUbuntu 1910から2004にアップグレード ... 失敗w
tag: raspberrypi4
ウチのラズパイ3号機はlinux/arm64を動かすためにUbuntu 1910を入れていたのだが、 Ubuntu 20.04 LTS for Raspberry Pi が出たからアップグレードできるでー、 と表示が出たので以下のコマンドを入力してみる。
do-release-upgrade
さて。上手くいくかな?
おっと。/etc/ssh/sshd_config に変更が入ってるけど、どっちを使う?の所でキー入力不可能になった。
推定だが、アップグレード中放置していたのでサスペンドに陥って復帰できなかったものと思われる。
ここで電源オフ→電源オンしたら以下の画面が出たww
あれっ!何かおかしいです。 問題が発生して、システムの復帰ができません。システム管理者に連絡してください
オワタ・・・\(^o^)/
さて、Ubuntu 20.04 for Raspberry Pi 4 のイメージのダウンロードからはじめようか。
RaspBerry Pi 4 3号機に Ubuntu 20.04 (64bit)をインストール
tag: raspberrypi4
手順自体は Ubuntu 19.10 64bit版をインストールする時と違いは無かった。
というわけで、ラズパイ3号機はUbuntu 20.04 LTSになった。
問題点は、サスペンドになるとキーボードやマウスを操作しても復帰しないこと。(これは 19.10 からそうだった)
ラズパイは電源ボタンとかサスペンドボタンとか無いので仕方ない。
do-release-upgrade によるアップデートの時は、新OS(というか下で設定するgdm)はサスペンド有り設定で入るので、サスペンドに落ちて失敗する。
アップグレード時はgdm落としてからやろうというのが教訓かな。
Ubuntu 20.04 xubuntu-desktop (gdm) 自動サスペンドの解除
tag: ubuntu, gnome, gdm, raspberrypi4
設定ファイルは以下。
ファイルの末尾付近のAutomatic suspendに以下の2行を追記する。
sleep-inactive-ac-timeout=0 sleep-inactive-battery-timeout=0
追加後は以下のような感じ。
# Automatic suspend # ================= [org/gnome/settings-daemon/plugins/power] # - Time inactive in seconds before suspending with AC power # 1200=20 minutes, 0=never # sleep-inactive-ac-timeout=1200 # - What to do after sleep-inactive-ac-timeout # 'blank', 'suspend', 'shutdown', 'hibernate', 'interactive' or 'nothing' # sleep-inactive-ac-type='suspend' # - As above but when on battery # sleep-inactive-battery-timeout=1200 # sleep-inactive-battery-type='suspend' sleep-inactive-ac-timeout=0 sleep-inactive-battery-timeout=0
緊急事態宣言の一部(39県)を解除とのこと
tag: 武漢肺炎
以下は東京都のグラフ。一時期に比較すれば随分減ったように感じるな。
これくらい減ったらまたクラスター対策班の効果が出るかもしれん。
22,177bytes
ただ、フルコンタクトがある夜の街、集まって声を出すライブハウス、集まって体を動かすスポーツジム、大規模遊興施設なんかはいつ再開できるかわからんねこれ。
NTT 東日本 - IPA 「シン・テレワークシステム」の続報
tag: 武漢肺炎
前回の続き。
写真を見るとどう見てもRaspberry Pi 4 Model Bでワロタw
ラズパイのうち25台は豪族(?)が秋葉原の店頭で買い集めたものを無償で貸し出されているらしい。
色々面白い企画で良いと思う。
25日に全面解除を検討
tag: 武漢肺炎
ちょっと予定より早いけど緊急事態宣言は一旦解除する模様。
さて、どうなるかな?
Windows 10, vagrant 2.2.9, virtualbox 6.1.8, ubuntu/focal64 が起動しなくなったゾ
tag: vagrant, virtualbox
centos/7, FreeBSD-12.1-RELEASEはvagrant経由で起動できる。うーん。謎。
virtualbox 6.1.8がマズイのかしら。
mstdn.jp鯖終了
tag: mastodon
mstdn.jp鯖サービス終了のお知らせ。
日本国内だと開示請求や訴訟対応の対策コストが高いので無料のSNSサーバは置けないってことかな。
首相表明「緊急事態宣言を全面解除」
tag: 武漢肺炎
緊急事態宣言は日本全国で解除とのこと。
東京と神奈川と北海道では微妙に感染拡大してる様子なのでどうなるかまだわからんね。
これからはクラスター狩りを中心に行うのだろうけど、ここで感染拡大の原因になった業種(バス団体旅行とか屋形船とかライブハウス)は業界ごと焼かれかねないので、おっかない展開もあり得る。
【8割おじさん西浦教授に聞く】新型コロナの実効再生産数のすべて
tag: 武漢肺炎
R言語を使って解析しとるんやね。ソースコードとかGitに上がっているらしい。見てもわからんけどw
実効再生産数R(t)の逆算結果が出るのが感染日から18日遅れになってしまう(潜伏期間、発症〜病院に行くまでの時間、診断確定までの時間、集計時間)のは仕方ないけど、ほぼ3週間放置してたら感染爆発手遅れになるのが課題。
3月くらいの欧州では、累積患者数倍化時間(2〜3日)が良く使われていて、これは反応が早いから急ぎで対策打たないといけないことを示す兆候として便利。
実効再生産数R(t)の逆算では、不顕性感染率が時間によらず一定の定数ならば打ち消すように数式が作られているので、新型コロナみたいに病院に行くほど重症にならない人が5割くらいいてもOK。
今週の確定患者数/先週の確定患者数*とある係数で、大雑把に実効再生産数R(t)みたいな評価値を計算するのも速報性が高くて良い。
8GBのRAM搭載で64ビット対応のRaspberry Pi 4が登場、標準OSも64ビット版がリリース
tag: raspberrypi4
お。8GB版か〜。これは良いかも。
Raspbian OS も64bit版が来たか。これでUbuntu 64bitを入れてもいいしRaspbianOS 64bitを入れても良くなったね。