コンピュータがデスクトップマネージャ(この場合はSDDM)で起動し、sshを介してコマンドを送信して、コンピュータのキーボードを使用してログインしたかのように、そのコンピュータを特定のユーザーとしてログインしようとしているとします。 Xリツイートについて話すのではありません。
問題のコンピュータはLinuxデスクトップで、子供が一定期間使用できるようにしました。携帯電話でsshコマンドを使用してタイムアウトを設定し、セッションをロックまたはロック解除できるように設定しました(loginctlを使用)。コンピュータが起動した後にコンピュータを使用する前に、妻または私はコンピュータにローカルにログインする必要があります。これでのみ画面ロックを制御できます。私はloginctlを使用してユーザーセッションを開始できることを知りませんでした。ただセッションを切り替えてロックして終了します。
この質問は、「tty1のSDDMがtty1の特定のユーザーとしてログインするようにtty2にどのコマンドを入力できますか?」尋ねるのと同じです。 tty.) SSHは実際には関係がないようです。 SSHは私に必要な技術を実装したものであり、ローカルでも行うことができます。
答え1
この問題は、以下に関連する可能性があります。
ディスプレイからリモートでセッションを開始する:0 そして X サーバーがすでに実行されている場合は、x11vnc をリモートで起動します。
この回答では、systemdをサービス管理者、SDDMをデスクトップ管理者、x11vncをVNCサーバーとします。さまざまなリソースの場合、適応は必要ありません。
Wake on LANを介してリモートでコンピュータを起動し、KDEログイン画面でユーザーのパスワードを入力するためにキーボードに物理的にアクセスできない場合、SSH経由でXディスプレイを開くことはできません。 VNCセッションを開始するだけです。
$ x11vnc --display $DISPLAY
このコマンドの出力は多少冗長ですが、詳しく読むと次のような内容が見つかります。
20/12/2019 19:32:35 *** XOpenDisplay failed ($DISPLAY) *** x11vnc was unable to open the X DISPLAY: "$DISPLAY", it cannot continue. ***
まだ認証されたXセッションがないためです。
出力をさらに読むと、次のようになります。
** If NO ONE is logged into an X session yet, but there is a greeter
login program like "gdm", "kdm", "xdm", or "dtlogin" running, you
will need to find and use the raw display manager MIT-MAGIC-COOKIE
file. Some examples for various display managers:
gdm: -auth /var/gdm/:0.Xauth -auth /var/lib/gdm/:0.Xauth
kdm: -auth /var/lib/kdm/A:0-crWk72
-auth /var/run/xauth/A:0-crWk72
xdm: -auth /var/lib/xdm/authdir/authfiles/A:0-XQvaJk
dtlogin: -auth /var/dt/A:0-UgaaXa
これが私たちがしなければならないことです。元のディスプレイマネージャMIT-MAGIC-COOKIEファイルを見つけて使用する必要があります。
出力に沿って
$ systemctl status sddm
私たちは次のようなものを見つけるでしょう
CGroup: /system.slice/sddm.service
|-650 /usr/bin/sddm
`-660 /usr/lib/Xorg -nolisten tcp -auth /var/run/sddm/{$somelongstring} -background none -noreset -displayfd 17 -seat seat0 vt1
上記のx11vnc Cookieファイルを入手してください。
# x11vnc --display $DISPLAY -auth /var/run/sddm/{$somelongstring}
これらの作業はrootとして実行する必要があります。
これで、コンピュータでX11 VNCサーバーが起動し、すべてのデバイス(スマートフォンも利用可能)のVNC接続を介してスタート画面のロックを解除できます。
誰かがSSHとVNCの接続を必要としないより簡単で簡単な解決策を思い付くことができれば、1行のコマンドで十分です。ただし、この方法は非常に高速であるため、問題を解決できます。
さまざまなサービスマネージャ、デスクトップマネージャ、およびVNCサーバーの場合は、ここにあるコマンドをそれに応じて調整する必要があります。
修正する:
私は昨日何らかの理由でこれについて考えていて、うまくいくかもしれない他のアプローチを見つけました。
アイデアは、基本的にデスクトップ/ログイン管理者を破棄するのではなく、それを介して認証し、Xをリモートで直接実行することです。
SSHサーバーサービスがデスクトップで有効になっているとします。リモートコンピュータ(携帯電話)でデスクトップマネージャ(SDDMなど)を停止します。
# systemctl stop sddm
それでは、次のような他のX初期化パッケージがインストールされているとしましょう。シーニット、startxなどのコマンドで十分です。コンソールで実行すると、
$ startx
Xは問題なく設定ファイルに従って起動します。私はすべてのUnix系システムを知っていませんが、私の経験では、startx
それが処理されるか、$HOME/.xinitrc
ファイルがない場合、/etc/X11/xinitrc
Xサーバーが期待どおりに起動します。
残念ながら、私たちはコンソールにいないので、他のシェル(SSHを介してコマンドを送信する端末エミュレータなど)で実行しようとしている場合は、次のように送信します。
$ startx
探す
/usr/lib/Xorg.wrap: Only console users are allowed to run the X server
一方、ルートはターミナルエミュレータを介してセキュリティシェルからXサーバーをリモートで初期化できます。例えば、
# startx
root
のホーム(または/etc/X11/xinitrc
上記のように)設定ファイルに従ってXサーバーを期待どおりに初期化します。これにより、権限を付与できないという問題ではなく、権限に対する問題だと考えることになります。
数分間検索して偶然見つけたXorgの使用中にエラーが発生しました:コンソールユーザーのみがXサーバーを実行できますか?、SSHログインには、コンソールユーザーのみがXサーバーを実行できることが示されます。/etc/X11/Xwrapper.config
、両方とも同じパスにまとめて、次の行を含むように編集(または存在しない場合は追加および編集)します。
allowed_users=anybody
needs_root_rights=yes
これによりstartx
、一般ユーザーは端末エミュレータでコマンドを実行できます。
ノート:
ファイルがそれに応じてロードされていることを確認してくださいXresources
。xinitrc
デスクトップ環境、ウィンドウマネージャ、xrdb
コマンドなどに正しく追加することを忘れないでください。
関連:
私はまた、以下からインスピレーションを得た別のアプローチについて考えています。 X11経由でフルグラフィックデスクトップを使用してリモートでログインする方法しかし、もう少し考えてみる必要があります。これは追加のソリューションにインスピレーションを与えることができ、より良いまたはより適切なオプションになります。
答え2
私はこのスクリプトを数週間前に作成し、うまくいったので、他の人のためにここに投稿します。上記のa-sf-dで紹介した方法を使用します。これは、SSHを介してログインし、数文字だけを入力できる必要がある元の要件とは異なりますが、コンピュータをリモートで表示および制御できるという利点があります。
#!/bin/bash
TMPVAR=`systemctl status sddm.service`
echo "TMPVAR = $TMPVAR"
TMPVAR2=$(echo $TMPVAR | cut -d '{' -f 2)
echo "TMPVAR2 = $TMPVAR2"
TMPVAR3=$(echo $TMPVAR2 | cut -d '}' -f 1)
echo "TMPVAR3 = $TMPVAR3"
TMPVAR4="/var/run/sddm/\{$TMPVAR3\}"
echo "TMPVAR4 = $TMPVAR4"
echo "starting VNC server with string: sudo x11vnc -auth $TMPVAR4 -
nopw -ncache 10"
x11vnc -auth $TMPVAR4 -nopw
このファイルを作成してアクティブ化し、起動時にsystemdを介してこのスクリプトを呼び出します。
x11vnc.service
[Unit]
Description=starts x11vnc server with authorization to access sddm
After=sddm.service graphical.target
Wants=display-manager.service
[Service]
ExecStart=/home/daddy/Desktop/sddm_VNC.sh
Restart=always
[Install]
WantedBy=graphical.target
そしてもちろん、
sudo systemctl enable x11vnc.service
答え3
非常に簡単な答えがあります。 SDDM自動ログインを有効にしてから、loginctl
開始直後または10秒後にすべてのセッションロックを呼び出すスクリプトを作成します。これによりloginctl
、ロックされている間も便利さを享受できます。
もう1つの方法は、SDDM設定をリモートで編集して自動ログインを有効にすることです。 sshを使用して手動で編集し、SDDMを再起動または再起動するか、呼び出し時に設定ファイルを自動ログインファイルに置き換えるスクリプトを作成できます。エイリアスを指定して簡単に実行できます。バラよりここより多くの情報を知りたいです。