GDMを使用してログインしたVNCサーバー

GDMを使用してログインしたVNCサーバー

リモートコンピュータを開いて物理的に存在せずにアクセスできるように、Debianコンピュータでサービスとして実行されるVNCサーバーを設定したいと思います。

1つのオプションは、ユーザーバスで設定することです。

$ systemctl --user cat vnc.service
# /home/stew/.config/systemd/user/vnc.service
[Unit]
Description=VNC Server
After=default.target

[Service]
ExecStart=x11vnc -nevershared -forever -nopw

[Install]
WantedBy=default.target

この方法は機能しますが、リモート操作を実行するgdm3には、端末に物理的に座ってログインする必要があります。 loginを使用する前にログインすると、XAUTHORITYサービスは失敗します。私はandを使ってこの問題を解決しました。sshgdm3AutomaticLoginEnable=TrueAutomaticLogin=stew/etc/gdm3/daemon.conf

代わりに、まず特定のユーザーとしてログインしなくてもVNCを使用できるようにしたい(RDPと同様)。最良の方法は、画面に-nopwアクセスすることです。gdm3

私はこれを試みます:

$ systemctl cat vnc.service
# /etc/systemd/system/vnc.service
[Unit]
Description=VNC Service (system-wide)
After=graphical.target

[Service]
ExecStart=x11vnc -auth /run/user/116/gdm/Xauthority -display :0 -nopw

[Install]
WantedBy=graphical.target

116パスがシステムユーザー:(UID)所有であることを示すこのコマンドを使用して、XAUTHORITYパスを見つけましたDebian-gdm

stew ~ $ ps wwwwaux | grep auth
root        1033  0.1  0.5 189548 63596 tty1     Sl+  14:32   0:00 /usr/lib/xorg/Xorg vt1 -displayfd 3 -auth /run/user/116/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -novtswitch -verbose 3

VNCがWaylandと機能しないようで、設定を続けるWaylandEnable=false必要があります。/etc/gdm3/daemon.conf

一見するとこれが効果があるようです。gdmログイン画面が表示されます。ただし、そのユーザーとしてログインしようとすると、情報がauth他のユーザーに転送され、接続が切断されます。

gdmでログインできるようにVNCを設定する方法はありますか?

答え1

完璧ではありませんが、ここに解決策があります。

VNCを実行しているサービスから始めて、GDMログイン画面に接続します。

$ systemctl cat vnc-gdm.service 
# /etc/systemd/system/vnc-gdm.service
[Unit]
Description=VNC Server (gdm)
After=graphical.target

[Service]
ExecStart=bash -c 'x11vnc -auth /run/user/$(id -u Debian-gdm)/gdm/Xauthority -display :0 -nopw'
Restart=on-failure
RestartSec=3

[Install]
WantedBy=graphical.target

次に、サポートするユーザーごとに異なるVNCサービスを追加します。インスタンスは2秒ごとにポーリングして、ExecStartPre=このユーザーのインスタンスがあることを確認しますXorg。これが発生した場合は、独自のインスタンスがバインドできるようにポートのvnc-gdm.service解放を停止します。5900x11vnc

それから実行されましたx11vnc

$ systemctl cat vnc-stew.service
# /etc/systemd/system/vnc-stew.service
[Unit]
Description=VNC Server (stew)
After=graphical.target

[Service]
User=stew
ExecStartPre=sh -c 'while ! pgrep -U stew Xorg; do sleep 2; done'
ExecStartPre=+systemctl stop vnc-gdm.service
ExecStart=x11vnc -many -shared -display :1 -auth /home/stew/.Xauthority -rfbauth /home/stew/.vnc/passwd
Restart=on-failure
RestartSec=3

[Install]
WantedBy=graphical.target

gdmを介してログインすると、接続が切断され、新しいモニターに再接続する必要があるため、スムーズではないと言います。複数のユーザーを対象にテストしたこともありませんでした。また、Xセッションからログアウトすると、再度ログインできないことが確実です。

私も私たちがsystemctl stopすることが好きではありませんExecStartPre=

答え2

Gnomeデスクトップを実行するDebian 11(Bullseye)では、Stewartのサービス定義はgdm helloセッション(上記のStewartの最初のコードブロック)でx11vncを実行するために使用されます。ほぼ私にとってはうまくいきますが、x11nvcがプライベートリソースにアクセスできないと文句を言って失敗します。 "sudo -u Debian-gdm"を挿入して問題を解決しましたが、結果は次のとおりです。

    ...
    ExecStart=bash -c 'sudo -u Debian-gdm x11vnc -auth /run/user/$(id -u Debian-gdm)/gdm/Xauthority -display :0 -nopw'
    ...

答え3

時々(常にそうではありませんが)再起動後に動作しません。テストしましたが、-display:1の代わりに-display:0を設定すると、ルート1人とユーザー2人が作成されるように見え、機能する準備が整いました。 Ubuntu 22.04で-display:1を使用する必要があると思いましたが、-display:0は実際には機能しますが、-display:1は機能しないようです。表示された2人のユーザーは、異なるCGroup番号でログインしたのと同じユーザー(ユーザー1000)にすることができます。理由はわかりませんが、うまくいきます。ログインする前に接続する機能を取得しようとしていますが、簡単ではないようですが、少なくとも回避策があります。

使用スティーブの答え、Ubuntu 22.04を使用すると、ほぼ達成できます。ログインしていない状態でこれを試してみましたが、現在は機能していないことに注意してください。この場合、他のユーザーが必要であり、いくつかの可能な解決策があることがわかります。次の操作は、すでにログインしている場合にのみ機能します。

少なくとも私にとって、これはx11vncが実際にUbuntu 22.04のx11(Waylandではない)と動作するようになります。

すでにSSHを使用しています - ポート5900

sudo apt-get install x11vnc net-tools

x11vncのためにかなり低い品質の完全なパスワードを設定して下さい。

x11vnc -storepasswd

近い道

cd /etc/gdm3
nano custom.conf

Waylandnable = falseのコメントを外します。

sudo nano /etc/systemd/system/x11vnc.service

次のファイルを作成します(自分のユーザー名を入力する必要があります。これを行うには、現在のPUTLOGGEDINUSERNAMEHEREユーザー名を2回入力する必要があります)。

[Unit]
Description=Start x11vnc at startup on Ubuntu 22.04 and x11 not Wayland.
After=multi-user.target

[Service]
Type=simple
ExecStart=bash -c 'sudo -u PUTLOGGEDINUSERNAMEHERE /usr/bin/x11vnc -display :0 -auth /run/user/1000/gdm/Xauthority -rfbauth /home/PUTLOGGEDINUSERNAMEHERETOO/.vnc/passwd -rfbport 5900'

ExecStop=/usr/bin/killall x11vnc
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

それから

sudo systemctl daemon-reload
systemctl start x11vnc.service

またはすでに実行している場合

sudo systemctl daemon-reload
systemctl restart x11vnc.service

その後、実際にSSHを介してポート22に接続し、実際にx11vncに接続できる必要があります。

-display:0が現在ほとんどの場合動作しているようで、-display:1はうまくいかない理由はわかりませんが、-display:0とUbuntuデスクトップを提案し、常に起動しているようです。残念ながら、自動的にログインする必要がありますが、いつでもすぐに画面をロックでき、x11vncは機能し続けます。

状態も確認できます。

systemctl status x11vnc.service

最近100件の履歴を見ることができます。

 journalctl -u x11vnc.service -n 100 

なぜ投げるのか完全にはわかりません。

ubuntuuser x11vnc[34174]: Libgcrypt warning: missing initialization - please fix the application

しかし、少なくとも全体のx11vncは実際にUbuntu 22.04で動作し、それを把握するのにほぼ一日かかりました。他の人がこの問題に直面する場合に備えて共有したかったのですが、ここで具体的に見られないものがあるかどうかはわかりませんでした。

ユーザ gdm はユーザ 126 です。なぜ?わかりませんが、上記のリンクに表示される120ではありません。

ログインする前に実際に利用できない理由を確認しようとしています。その理由のいくつかは、rootとしてコマンドを実行する必要があり、/bin/sh -c sudoを使用する必要があるためです。 'ExecStartコマンドを使用して実際にこれを行います。

また、もっと重要なのは、デフォルトのユーザーが1000としてマークされ、所定の位置にありますが、gdmはそうではありません。これがおそらくログインしようとしたときにそのユーザーを割り当てることができない理由ですか?

sudo ls -la /run/user/126/gdm

空です。

sudo ls - la /run/user/1000/gdm

ユーザーが1000とXauthorityにあることを示しますが、gdmには何も表示されません。

私は現在私が理解しているレベルを超え始めましたが、以前のバージョンのUbuntuとは異なり、gdmユーザーには、過去数回のUbuntuリリースの標準であった100、106、または120が割り当てられているようです。おそらく、以前は機能していましたが、ログインする前に機能するように設定できなかった理由に関連している可能性があります。

時にはx11vnc.serviceを起動し、/etc/systemd/systemx11vnc.serviceファイルを編集し、それをdisplay:0からdisplay:1に変更してから2番目のファイルを追加することができます(技術的にはsudo -u startで起動した後3番目のファイル)。 )ユーザーが突然動作しました。とにかく、常にdisplay:1を使用する必要があります。なぜ新しいCGroupに2番目のユーザーを追加するのかはわかりませんが、x11vnc.serviceを再起動すると常に機能するようです。

明確に言えば、Ubuntu 22.04ではx11vncに関するいくつかの点が変わったようです。 x11vncで特に問題になった最後のいくつかのバージョンのいくつかの変更と、その特定のバージョンでのみ動作するコードがかなりたくさんあることを確認しました。

最後にXカーソルがありますが、UbuntuデスクトップとWindowsの上部にのみあります。ターミナルの上に移動すると、点がある通常のマウスカーソルに変わります。

役に立つ場合は、実際に動作する様子を示す追加のコードがあります。 sudo以外のバージョンが表示された場合は、実行されずにループのみが発生します。 2つが見える場合は実行中であり、接続できるものです。

x11vnc.service - Start x11vnc at startup.
     Loaded: loaded (/etc/systemd/system/x11vnc.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-06-01 19:30:40 EDT; 2s ago
   Main PID: 2734 (sudo)
      Tasks: 3 (limit: 9354)
     Memory: 9.1M
        CPU: 88ms
     CGroup: /system.slice/x11vnc.service
             \u251c\u25002734 sudo -u ubuntuuser/usr/bin/x11vnc -noxrecord -noxfixes -auth /run/user/1000/gdm/Xauthority -forever -loop >
             \u251c\u25002735 /usr/bin/x11vnc -noxrecord -noxfixes -auth /run/user/1000/gdm/Xauthority -forever -loop -noxdamage -rfbaut>
             \u2514\u25002736 /usr/bin/x11vnc -noxrecord -noxfixes -auth /run/user/1000/gdm/Xauthority -forever -loop -noxdamage -rfbaut>

Jun 01 19:30:41 ubuntuuser bash[2736]: The VNC desktop is:      ubuntuuser:5900
Jun 01 19:30:41 ubuntuuser bash[2736]: 01/06/2022 19:30:41 possible alias:    ubuntuuser::5900
Jun 01 19:30:41 ubuntuuser bash[2736]: PORT=5900
Jun 01 19:30:41 ubuntuuser bash[2736]: ******************************************************************************

時には最良の再現方法は完全にはわかりませんが、接続されている状態でx11vnc.serviceを再起動しようとすると、端末がハングして応答が停止することがあります。その後、終了すると sudo と 2 つの CGroup ユーザーのうちの 1 人が削除されますが、そのうちの 1 人は残り、x11vnc.service は緑から白に変わります。サービスを再起動すると、合計3人のユーザーが復元されるため、再接続するだけです。また、奇妙なことに、-display:0設定を指定すると、通常はまだ機能します。 -display:1でなければならないという印象を受けましたが、誰がわかりますか?より多くのテストで、-display:0が起動時に機能する可能性が高いことがわかりました。

x11vncA.serviceの2番目のバージョンを追加して起動時に実行し、別のポートまたは別のモニタを開こうとしましたが、常に失敗し、「ロード済み:ロード済み」モードに入り、無効になるようです。もう一つは動作していますが。さまざまな開始点(multi-user.targetの代わりにgraphic.target)を試しましたが、何らかの理由で機能したため、multi-user.targetに残しました。なぜこのように始まったのですか? -display:0 から始めて、どういうわけか -display:1 で実行する必要があるかどうかを推測してみると、最終的には起動し続けますが、どのように動作するかはわかりません。ちょうどGnomeベースの:1デスクトップが欲しい!

以下は、ログイン時に同様の設定のためのいくつかの潜在的な開始点です。現時点では動作しませんが、少なくともUbuntu 22.04ではx11vncを使用できます。

また、見ることができますUbuntu 18.04 LTS x11vnc は動作しなくなりました。

x11vnc.serviceを作成してください。自動的にログインすると仮定すると、これを行うために必要なすべてのようです。しかし、これを行うには、GUIと実際のデスクトップを起動する前に他のものを試す必要があるようです。

関連情報