openSUSE Leap 42.2 GNOME ターミナル 3.20.2
端末ウィンドウを開きました。次のコマンドを入力すると:
gnome-terminal
root以外のユーザーとして新しい端末を正常に起動しました。
ただし、rootとしてコマンドを実行すると、次のエラーメッセージが表示されます。
org.gnome.Terminal用のエージェントの構築中にエラーが発生しました:/org/gnome/Terminal/Factory0:接続が閉じられました。
端末を起動しようとするとdbus-launch gnome-terminal
機能します。
gnome-terminal
コマンドが端末をrootとして起動できないのはなぜですか?許容可能な回避策ですかdbus-launch
、それとも予期しない問題を引き起こす可能性がありますか(何が起こっているのかわかりません)。
ベストアンサー1
Win32が登場し、それを取り除く前にWin16日を覚えてください。 Windowsアプリケーションが主にどのように機能したかを思い出してくださいhInstance
。hPrevInstance
コマンドスクリプトツール(Take Commandなど)を使用すると、アプリケーションを2回目に呼び出し、画面にはっきりと追加されたウィンドウとして表示されますが、コマンドソルバーに関する限り、実行したばかりのサブプロセスはすぐに終了しますか?
GNOMEはLinux用のWin16の動作を復元します。
GNOME端末は現在クライアント - サーバーアプリケーションです。このgnome-terminal
プログラムは、デスクトップバスメッセージをサーバーに構成し、コマンドラインオプション、環境、作業ディレクトリ、およびパラメータを渡してから単にシャットダウンするクライアントです。サーバーはデスクトップバスにgnome-terminal-server
登録されておりorg.gnome.Terminal
、すべての物理端末エミュレーションとGUIのウィンドウ表示を担当します。
デスクトップバスクライアントはgnome-terminal
通常、ユーザー固有のディレクトリのソケットを指す環境変数を介してデスクトップバスエージェントを探します。/run/user/1001
たとえば、環境変数は、「現在のユーザーのランタイムディレクトリ」から取得することを指定します。クライアント・プロセスの実効ユーザー ID は、上記と同様のパスを構成します。どちらの場合も、ディレクトリは通常個々のユーザーにのみ公開され、他の(権限のない)ユーザーはアクセスできません。
人々がこのようにして他のユーザーとして実行しようとすると、gnome-terminal
面白いことが起こります。sudo
環境変数が明示的に名前付きランタイムディレクトリを指している場合、権限のないクライアントはユーザー固有のデスクトップバスに接続できません。環境変数が「現在のユーザーの」ランタイムディレクトリを指している場合は、無効なDesktop Busエージェント(通常はそのユーザーのエージェント)を見つけます。今は何もないユーザーがまだログインしておらず、そのユーザーアカウントのユーザー固有のサービスを開始していないため、Desktop Busエージェントが実行されています。 (ユーザー固有のデスクトップバスエージェントは、ユーザー固有のサービスマネージャによって実行されます。ユーザー固有のサービスマネージャは明示的に起動するか、一部のサービス管理ソフトウェアではサーバーへのやや醜いフックで起動しますlogin
。su
およびSSHサーバープログラムなど)
dbus-launch
スーパーユーザーになる理由は、dbus-launch
明示的に別のデスクトップバスエージェントを起動し、それをスーパーユーザーとして実行してgnome-terminal
通信できたからです。幸いなことに、システムはgnome-terminal-server
クライアントがプロキシを介してサーバーに接続しようとしたときにサーバーの起動を要求するように構成されています。 (必ずしもそうではなく、この種の需要の開始は、どのようなサービス管理でも実行されていない多数のデスクトップバスサーバープロセスで終わるため、今では悪いメカニズムと見なされます。と考えられ、一般的に良い考えとは見なされません。根これらのサービスの多くは、通常のユーザーアカウントで実行したいので、スーパーユーザー権限で実行したくないため、これらのサービスを実行するためのアカウントです。 )
質問者様の言葉通りなら「ヘッドレスサーバーでリモートでgnome-terminalを起動するには? (X11転送では起動できません)gnome-terminal
「実際には、ユーザーは元のユーザーがDesktop Busエージェントを実行していなくてもDesktop Busエージェントを実行しようとします。これは、ユーザー固有のデスクトップバスエージェントが実行されておらず、デスクトップバスを介してgnome-terminal-server
サーバーにアクセスできないことを意味します(システム設定方法によっては、グラフィカルログインのためにユーザー固有のサービスマネージャが引き続き実行される可能性があります)。その結果、同じユーザーのグラフィカルログインが魔法のように機能し、dbus-launch
サービス管理されていないデスクトップバスエージェントが明示的に再起動されることがわかります。
login
ただし、サービスマネージャの1人がサーバーに接続し、SSHを介してサーバーに接続できると、su
より多くの笑いが出ます。これらのフックは通常、ユーザーが初めてログインしたときに開始されるユーザー固有のサービスの管理と、すべてのユーザー固有のサービスを開始し、そのユーザーが最終的にログアウトしたときにすべてのサービスを停止することを意味します。短期間で重複しないSSHセッションが多い場合は、ジョブの開始と終了でユーザーごとのサービス管理システム全体(および自動的に開始されるすべてのサービス)を開始および終了するためにかなりのオーバーヘッドが発生する可能性があります。各SSHセッション。 systemdは、「ホバリング」メカニズムが完璧ではなく、実際に問題の半分しか解決しないサービスマネージャの1つです。これは、最後のログアウト後にユーザー固有のサービス管理が「停止しますが」ユーザー固有のサービス管理が開始されるのを妨げないことを意味します。
追加読書
- ジョナサンデボインポラード(2016)。
/run/user/jim/dbus
。記者。 スナックガイド。ソフトウェア。 jdebp.eu. - ジョナサンデボインポラード(2016)。 」ユーザー別ユーザーサービス」。 スナックガイド。ソフトウェア。 jdebp.eu.
- gnome-terminalの実際のマルチプロセスインスタンスの実行
- ユーザーシステムサービスを継続的に作成します。
- https://unix.stackexchange.com/a/323700/5132