経緯
実現したかったこと
systemd で boot 時に x0tigervncserver
コマンドを自動的に起動して、Windows PCからリモートデスクトップで接続したい。
そうすれば、linuxのデスクトップ上で作業していたことをリモートから引き続き作業できる。
(wiresharkで解析中に中断して別の場所へ移動したときとかに便利)
悩んだこと
複数の日米のサイトで、下記の一行を使って systemd から起動する例として、
ExecStart=/bin/sh -c 'sleep 10 && /usr/bin/x0vncserver -display :0
&'
が示されていたのですが、自分の環境ではうまく動作しませんでした。
/home/oralton/.vnc 下のログで
Geometry: Desktop geometry is set to 1920x1080+0+0
XDesktop: Using evdev codemap
XDesktop:
XDesktop: XTest extension present - version 2.2
Main: Listening on port 5900
3NI3X0 New X0tigervnc server 'hoge:0 (oralton)' on port 5900 for display :0.
3NI3X0 Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/oralton/.vnc/passwd :0 to connect to the VNC server.
Killing X0tigervnc process ID 4342... Main: Terminated
success!
のように、「killing ....」の行で起動直後に終了してしまっていました。
環境
- 古めのノートPC
- "Debian GNU/Linux 11 (bullseye)
- display manager: Gnome (bullseyeインストール時のdefault設定のまま)
- xrdp 導入済み
- デスクトップへの autologin 設定済み
解決の要点
- ExecStart の中で
x0tigervncserver &
でbackground起動していたのが駄目だったようです。 - ついでに ExecStartPre を活用して sleep は別の行に記述します。
実践
設定
vim /etc/systemd/system/x0tigervncserver.service に以下を記述しました。
[Unit]
Description=x0tigervncserver (mirroring about disp:0)
After=network.target gdm.service
Requires=gdm.service
[Service]
SyslogIdentifier=x0tigervncserver
Type=forking
User=oralton
Group=oralton
WorkingDirectory=/home/oralton
ExecStartPre=/usr/bin/sleep 30
ExecStartPre=/usr/bin/echo "hello! xrdp!!"
ExecStart=/usr/bin/x0tigervncserver -display :0 -rfbport 5900 -passwordfile /home/oralton/.vnc/passwd
[Install]
WantedBy=multi-user.target
簡単に動作確認
※ xrdpやデスクトップへのオートログインは設定済みです。
このため、
systemctl daemon-reload
systemctl start x0tigervncserver.service
systemctl enable x0tigervncserver.service
reboot
としてから、
Windows PCでリモートデスクトップ接続して動作確認できました。