同じUbuntu系でありながら、ディスプレイマネージャに SDDM が採用されている Kubuntu 22.04 デスクトップに、Ubuntu 22.04 GDMと同じ様に x11vnc を入れ、ログイン画面からリモートデスクトップ操作できるようにします。
KubuntuはSDDM
前回、x11vncを導入したのはディスプレイマネージャにGDMが採用された、Ubuntu 22.04デスクトップでした。
今回、x11vncを入れるKubuntu 22.04デスクトップのディスプレイマネージャはSDDM。この違いがセットアップにどう影響するのでしょう。
1 2 3 4 5 6 7 8 |
$ uname -a Linux NUC8Kubu 6.2.0-32-generic #32~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 18 10:40:13 UTC 2 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$ cat /etc/X11/default-display-manager /usr/bin/sddm $ systemctl status display-manager ● sddm.service - Simple Desktop Display Manager Loaded: loaded (/lib/systemd/system/sddm.service; enabled; vendor preset: enabled) Active: active (running) Docs: man:sddm(1) man:sddm.conf(5) Process: 669 ExecStartPre=/bin/sh -c [ "$(cat /etc/X11/default-display-manager 2>/dev/null)" = "/usr/bin/sddm" ] (code=exited, statu> Main PID: 671 (sddm) Tasks: 20 (limit: 18866) Memory: 208.6M CPU: 40min 42.577s CGroup: /system.slice/sddm.service ├─671 /usr/bin/sddm └─686 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{ee831129-c1ae-4047-bc83-346254cc1308} -background none -noreset> $ systemctl status sddm ● sddm.service - Simple Desktop Display Manager Loaded: loaded (/lib/systemd/system/sddm.service; enabled; vendor preset: enabled) Active: active (running) Docs: man:sddm(1) man:sddm.conf(5) Process: 669 ExecStartPre=/bin/sh -c [ "$(cat /etc/X11/default-display-manager 2>/dev/null)" = "/usr/bin/sddm" ] (code=exited, statu> Main PID: 671 (sddm) Tasks: 20 (limit: 18866) Memory: 208.4M CPU: 40min 42.962s CGroup: /system.slice/sddm.service ├─671 /usr/bin/sddm └─686 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{ee831129-c1ae-4047-bc83-346254cc1308} -background none -noreset> |
x11vncのインストールとVNCパスワード生成
x11vncのインストールはUbuntu 22.04同様に、パッケージマネージャから行います。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ apt list x11vnc -a x11vnc/jammy 0.9.16-8 amd64 $ sudo apt install x11vnc The following additional packages will be installed: libtk8.6 libvncserver1 tk tk8.6 The following NEW packages will be installed: libtk8.6 libvncserver1 tk tk8.6 x11vnc 0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. Need to get 1,950 kB of archives. After this operation, 5,002 kB of additional disk space will be used. Do you want to continue? [Y/n] y |
VNCパスワードの生成手法も前回と同じです。
1 2 3 4 5 6 7 8 |
$ x11vnc -storepasswd Enter VNC password: Verify password: Write password to /home/user/.vnc/passwd? [y]/n y Password written to: /home/user/.vnc/passwd $ ls -l ~/.vnc/ -rw------- 1 user user 8 Sep 12 09:37 passwd |
SDDMにおけるディスプレイ番号
Ubuntu 22.04 GDMでは環境変数からディスプレイ番号を確認しましたが、SDDMでは何も入っておらず、結局 :0 の決め打ちで良さそうです。
1 2 3 4 5 6 7 8 9 10 |
$ echo $DISPLAY $ x11vnc -usepw -display :0 12/09/2023 09:41:50 -usepw: found /home/user/.vnc/passwd 12/09/2023 09:41:50 x11vnc version: 0.9.16 lastmod: 2019-01-05 pid: 10039 12/09/2023 09:41:50 Using X display :0 12/09/2023 09:41:50 rootwin: 0x774 reswin: 0x5e00001 dpy: 0x3226ed90 -略- The VNC desktop is: NUC8Kubu:0 PORT=590 |
コマンドラインからの実行も問題無く待ち受け状態となり、別PCのRemminaからVNC接続することを確認しました。
X authorityファイルはランダム
問題はX authorityファイルを指定する手段。GDM同様にSDDMでも -auth guess でguessできないので、明示的に指し示す必要があります。
1 2 3 4 |
Sep 12 09:54:43 NUC8Kubu x11vnc[13544]: xauth: unable to generate an authority file name Sep 12 09:54:43 NUC8Kubu x11vnc[13499]: 12/09/2023 09:54:43 -auth guess: failed for display=':0' Sep 12 09:54:43 NUC8Kubu x11vnc[13499]: 12/09/2023 09:54:43 -auth guess: since we are root, retrying with FD_XDM=1 Sep 12 09:54:43 NUC8Kubu x11vnc[13499]: 12/09/2023 09:54:43 -auth guess: failed for display=':0' |
SDDMでは、X authorityファイル名が毎セッションランダムなUUIDで生成される仕組みが少し厄介。実際にログイン画面からログイン、ログアウトと状態を遷移させてみると…
1 2 3 4 5 6 7 8 9 10 11 |
ログイン前待ち受け) $ ls -l /var/run/sddm/ -rw------- 1 sddm sddm 53 Sep 14 11:52 {60f101f8-9556-4e3e-a29c-bb60d856275a} ログイン後・デスクトップ) $ ls -l /var/run/sddm/ -rw------- 1 sddm sddm 53 Sep 14 11:52 {60f101f8-9556-4e3e-a29c-bb60d856275a} ログアウト待ち受け) $ ls -l /var/run/sddm/ -rw------- 1 sddm sddm 53 Sep 14 11:54 {0716689e-7b6a-4fb9-aebc-757fe85c8e2a} |
このような場合に、x11vncにX authorityファイルを掴ませる手法は、こちらのページのSDDM項を参考にしました。
1 2 3 4 |
# x11vnc -display :0 -auth $(find /var/run/sddm/ -type f) findが使えない場合は、 # x11vnc -display :0 -auth /var/run/sddm/* |
サービス登録時の注意点
サービスファイルの ExexStart 項にx11vncコマンドラインを記述する際、上述の -auth オプションが含まれているとそのままでは正しく解釈されず、x11vncが -auth guess の時と同じ状態に陥ってしまいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
user@NUC8Kubu:~$ systemctl status x11vnc ● x11vnc.service - x11vnc Remote Local Session Loaded: loaded (/etc/systemd/system/x11vnc.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2023-09-12 10:13:15 HKT; 4s ago Main PID: 15335 (x11vnc) Tasks: 1 (limit: 18866) Memory: 1.4M CPU: 29ms CGroup: /system.slice/x11vnc.service └─15335 /usr/bin/x11vnc -auth "`find" /var/run/sddm/ -type "f`" -display :0 -rfbauth /home/user/.vnc/passwd -rfbport 5900 -foreve> Sep 12 10:13:18 NUC8Kubu x11vnc[15337]: dtlogin: -auth /var/dt/A:0-UgaaXa Sep 12 10:13:18 NUC8Kubu x11vnc[15337]: Sometimes the command "ps wwwwaux | grep auth" can reveal the file location. Sep 12 10:13:18 NUC8Kubu x11vnc[15337]: Starting with x11vnc 0.9.9 you can have it try to guess by using: Sep 12 10:13:18 NUC8Kubu x11vnc[15337]: -auth guess Sep 12 10:13:18 NUC8Kubu x11vnc[15337]: (see also the x11vnc -findauth option.) Sep 12 10:13:18 NUC8Kubu x11vnc[15337]: Only root will have read permission for the file, and so x11vnc must be run Sep 12 10:13:18 NUC8Kubu x11vnc[15337]: as root (or copy it). The random characters in the filenames will of course Sep 12 10:13:18 NUC8Kubu x11vnc[15337]: change and the directory the cookie file resides in is system dependent. Sep 12 10:13:18 NUC8Kubu x11vnc[15337]: See also: http://www.karlrunge.com/x11vnc/faq.html Sep 12 10:13:18 NUC8Kubu x11vnc[15335]: --- x11vnc loop: sleeping 2000 ms --- |
対策としては、 ExecStart 項へ記述するコマンドライン全体を /bin/bash -c "..." で包んであげるのだそう。前回のGDM版のサービスファイルを元に、取り敢えずこのようなサービスファイルを作成しました。
1 2 3 4 5 6 7 8 9 10 11 |
[Unit] Description=x11vnc Remote Local Session After=network-online.target [Service] Type=simple ExecStart=/bin/bash -c "/usr/bin/x11vnc -auth $(find /var/run/sddm/ -type f) -display :0 -rfbauth /home/user/.vnc/passwd -rfbport 5900 -forever -loop -xkb -noxdamage -repeat -shared" ExecStop=/bin/kill -TERM $MAINPID ExecReload=/bin/kill -HUP $MAINPID KillMode=control-group Restart=on-failure |
このサービス定義の問題点は、
ログアウトしても、新しく別名で生成されたX authorityファイルのことを知るすべがない
ということ。サービスを再起動しない限り、新しいX authorityファイルを掴むことはありません。
いろいろ調べた結果、こちらのスレッド回答を参考に対策してみます。
変更内容は次の2つ、
- Restart オプションの変更。
- x11vncコマンドオプションから -loop -forever を削除。
こうして完成したx11vncサービスファイルは、以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[Unit] Description=x11vnc Remote Local Session After=network-online.target [Service] Type=simple ExecStart=/bin/bash -c "/usr/bin/x11vnc -auth $(find /var/run/sddm/ -type f) -display :0 -rfbauth /home/user/.vnc/passwd -rfbport 5900 -xkb -noxdamage -norepeat -shared" ExecStop=/bin/kill -TERM $MAINPID ExecReload=/bin/kill -HUP $MAINPID KillMode=control-group Restart=always RestartSec=5 [Install] WantedBy=graphical.target |
副作用としては、ログイン画面からログインすると、一旦VNCセッションが切れてしまうこと。
自動再接続されないので、クライアント側からもう一度接続する必要があります。
Kubuntu 22.04 SDDMでは前回のGDMとは異なり、SDDMではログイン画面〜デスクトップまで単一インスタンスで待ち受け・操作できるのは、結果的に大きな利点となりました。