suユーザーの「指定されていないプロトコル」を解決する方法

suユーザーの「指定されていないプロトコル」を解決する方法

私のシステムでグラフィカルソフトウェアを実行するために代替ユーザー(管理者ではない)を使用しようとしています。代替ユーザーは、同じ名前のリモート・システム・ユーザーと一致するように名前が付けられ、UIDとGIDが提供されます。 UIDは500なので、このユーザーは「ログインしていない」ユーザーになります。

Ubuntuで起動し、デフォルトのアカウントでログインし、ターミナルを開き、su代替ユーザーに切り替えました。その後、アプリケーションを起動するコマンドを実行しようとしましたが、「指定されたプロトコルなし」というメッセージを受け取りました。

UIDが< 1000であるのか、suそれともユーザーが管理者ではないからですか?このユーザーにGUIを使用してアプリケーションを実行させるにはどうすればよいですか?

答え1

私の場合、新しいディスプレイサーバープロトコルがwayland問題でした。

これにより、xhost + local:他のユーザー(ルートなど)がセッションでプログラムを実行できるようになりますが、ネットワーク接続は許可されません。

顧客を許可したい場合すべてのホストxhost +、ホストを指定せずに使用できます。しかし、これは安全ではありません、セッションアクセスを許可するホストのみを指定するのが最善です。

答え2

問題はいいえユーザーのUIDが原因で発生します。 500をUIDとして使用するのは問題ありません。そのUIDは、一部のディスプレイマネージャのデフォルト設定を除いて、「ログインしていない」ユーザーにはなりません。

エラーメッセージプロトコルが指定されていません。アプリケーション固有のエラーメッセージのように聞こえ、役に立ちません。しかし、私の考えでは、アプリケーションが別のユーザーとして実行されているため、そのアプリケーションがX11ディスプレイに接続できないため、エラーが発生しているようです。他のユーザーが実行しているシステムの他のプロセスがディスプレイをハッキングし、ウィンドウを作成し、キーストロークをスヌープできないようにするために、アプリケーションはX11サーバーと通信するために「魔法クッキー」(秘密トークン)を必要とします。デスクトップ環境を起動したユーザーのみがアクセスできるように権限が設定されているため、他のシステムユーザーはこのマジッククッキーにアクセスできません。

X11 Cookieを別のアカウントにコピーするには、元のユーザーとして実行してみてください。

su - <otheruser> -c "unset XAUTHORITY; xauth add $(xauth list)"

その後、アプリケーションを実行します。XAUTHORITYシェルで設定を解除する必要があるかもしれません。このコマンドは、基本ユーザーからマジッククッキー()を抽出し、他のユーザーが取得できる場所にxauth list追加()します。xauth add

答え3

あなたがXと接触するように無差別代入をしたいとしましょう...

(Xが実行されている)サーバー上ですでにコマンドを実行しているとし、それ以外の場合は最初に動作させてから、クライアントで「ssh -X user@server」を使用します。

xauthコマンドを実行する方法はいくつかあります。たとえば、「sudo」を使用できますが、環境変数が失われたり変更されたりする可能性があります。 DISPLAYおよびXAUTHORITY環境変数を保存する必要があります。このような場合であるかどうかをテストするには、コマンドを実行するのと同じ方法で "echo $ XAUTHORITY"を実行できます。ただし、これらのコマンドを実行する前に環境変数を拡張しないでください。たとえば、sudo bash -c 'echo "$ XAUTHORITY"'を実行してsudoを実行した後、XAUTHORITYが正確に何かを確認します(消えた場合は、sudoersファイルに何かを追加する必要があるかもしれません。他の場所を参照)。

最後に、アクセスするユーザーとしてサーバーで次のコマンドを実行します。

xauth info

これにより、使用される「権限ファイル」が表示されます(デフォルトでは/root/.Xauthority、rootの場合、または/home/theuser/.Xauthorityなどのファイル)。正しい。

ファイルがある場合は削除します。

mv /root/.Xauthority /root/.Xauthority.bak

もちろん、上記のコマンドで/root/.Xauthority状況に応じて正しいXAUTHORITYファイルを置き換えてください。

再生成しますが空です(多くのコマンドに必要です)。

touch /root/.Xauthority

この時点であなたは得るでしょうプロトコルが指定されていません。エラーが発生しても無効なMIT-MAGIC-COOKIE-1これから。現在Xサーバーで使用されている権限ファイルを見つけます。

ps aux | grep Xorg

次のように表示する必要があります。

root 1153 0.0 1.0 149560 44464 tty7 Ss+ dec02 0:00 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711} -background none -noreset -displayfd 17 vt7

次のファイル名は、-auth次のコマンドに必要なファイル名です。ルートとして実行:

sudo xauth -f '/var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711}' list

32桁の16進キーが一覧表示されます。たとえば、出力は次のようになります。

hostname/unix:0 MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7

これを使用して.Xauthorityファイルを作成します(再度ログインする必要があるユーザーとして):

xauth add $DISPLAY MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7

「c0eaf749aa252101a0f57d5087089db7」をlistコマンドから返された内容に置き換えます。 .Xauthorityのサイズは51バイトでなければならず、Xサーバーに(再び)接続できるようになりました。

PS/usr/bin/startx私のようにXorgを実行して起動した場合は、次のようなものが表示されます。

root        1652  0.0  0.0  12788  5792 ?        Ss   jan20   0:00 login -- carlo
carlo       1834  0.0  0.0   8140  3468 tty1     Ss   jan20   0:00  \_ -bash
carlo       1887  0.0  0.0   7404  3236 tty1     S+   jan20   0:00      \_ /bin/sh /usr/bin/startx
carlo       1905  0.0  0.0   3912   828 tty1     S+   jan20   0:00          \_ xinit /home/carlo/.xinitrc -- /etc/X11/xinit/xserverrc :0 vt1 -keeptty -auth /tmp/serverauth.WWPpq4OSlA
root        1906  1.2  0.7 25576848 235104 tty1  Sl   jan20 207:56              \_ /usr/lib/Xorg -nolisten tcp :0 vt1 -keeptty -auth /tmp/serverauth.WWPpq4OSlA
carlo       1917  0.0  0.0 143408 10884 tty1     Sl   jan20   0:00              \_ startplasma-x11

削除されました/tmp/serverauth.WWPpq4OSlA/usr/bin/startx動作方法については、スクリプトを参照してください。

mcookie=`/usr/bin/mcookie`
xserverauthfile=`mktemp -p /tmp serverauth.XXXXXXXXXX`
trap "rm -f '$xserverauthfile'" HUP INT QUIT ILL TRAP KILL BUS TERM
xauth -q -f "$xserverauthfile" << EOF
add :$dummy . $mcookie
EOF

また

xauth -q << EOF
add $displayname . $mcookie
EOF

ユーザー.XauthorityファイルにランダムなCookieを追加します。

この場合、クッキーは完全に消えます。私がそれを元に戻すことができる唯一の場所はXorgプロセスのメモリ(RAM)ですが、それを復元する方法を見つけるにはあまりにも怠惰です。もちろん、Xを再起動すると、新しいCookieでファイル.Xauthorityが再生成され、同じCookieでサーバーが再起動されます。

答え4

端末にこれを入力しxhost +SI:localuser:rootexport DISPLAY=:0.0もう一度やり直してください

関連情報