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
を妨げているもの ルートとしてターミナルを起動するコマンド?そして、 dbus-launch
許容できる回避策、または予期しない問題を引き起こす可能性がありますか(私はそれが何をしているのか本当にわかりません)?
承認された回答:
Win32が登場して廃止される前のWin16日間に、Windowsアプリケーションが主にどのように機能していたかを思い出してください。 hInstance
があった場所です。 およびhPrevInstance
、多くのアプリケーションの2番目のインスタンスを実行しようとすると、最初のインスタンスに物事が渡されるだけで、コマンドスクリプトツール(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
を介して別のユーザーとして など。環境変数が明示的に名前が付けられたランタイムディレクトリを指している場合、特権のないクライアントはユーザーごとのデスクトップバスに接続できません。環境変数が「現在のユーザーの」ランタイムディレクトリを指している場合、間違ったデスクトップバスブローカーを探します。多くの場合、現在持っていないユーザーのブローカーです。 ユーザーがログインしておらず、そのユーザーアカウントのユーザーごとのサービスを開始していないために実行されているDesktopBusブローカー。 (ユーザーごとのデスクトップバスブローカーは、ユーザーごとのサービスマネージャーによって実行されます。ユーザーごとのサービスマネージャーは、明示的に開始されるか、一部のサービス管理ソフトウェアの場合は、によって採用されているユーザー認証プロセスへのかなり醜いフックによって開始されます。 login
のようなもの 、 su
、およびSSHサーバープログラム。)
dbus-launch
が スーパーユーザーとしてあなたのために働いたのはそのdbus-launch
スーパーユーザーとして実行されている別のデスクトップバスブローカーを明示的に起動しました。このブローカーはgnome-terminal
と話すことができました。幸い、システムは gnome-terminal-server
をデマンドスタートするようにも構成されていました クライアントがブローカーを介してサーバーに接続しようとしたときのサーバー。 (これは必ずしも当てはまるわけではなく、今日では、このようなデマンド開始は、いかなる種類のサービス管理の下でも実行されていない多くのデスクトップバスサーバープロセスで終わるため、劣ったメカニズムと見なされています。実際、ブローカー自体がありません。サービス管理の下でも劣っていると見なされます。また、一般的にスーパーユーザーにとっては良い考えとは見なされません。 これらの種類のサービスを実行するためのアカウント。これらのサービスの多くは、通常のユーザーアカウントの管理下で実行されることを期待しているため、スーパーユーザー特権で実行されることを期待していません。)
「ヘッドレスサーバーでgnome-terminalをリモートで起動するにはどうすればよいですか? (X11転送での起動に失敗します)」、人々は gnome-terminal
を実行しようとします 元のユーザーでさえDesktopBusブローカーを実行していない場合。これは、たとえば、SSH経由でログインしたが、SSHログインプロセスがユーザーごとのサービスマネージャーを起動しない場合に発生します。つまり、ユーザーごとのデスクトップバスブローカーが実行されておらず、 gnome-terminal-server
デスクトップバスを介してサーバーにアクセスすることはできません。 (システムの構成方法によると、グラフィカルログインはユーザーごとのサービスマネージャーの起動をトリガーする可能性があるため、同じユーザーとしてグラフィカルにログインすると魔法のように動作することがわかります。また、 dbus-launch コード> サービス管理されていないデスクトップバスブローカーを明示的に開始します。)
login
へのフックを持つサービスマネージャーの1人がいると、さらに陽気になります。 、 su
、およびSSHサーバー。これらのフックは通常、ユーザーごとのサービス管理を開始するセマンティクスと、それが開始するすべてのユーザーごとのサービスを、そのユーザーの最初のログオン時に実装します。そして、そのユーザーの最後のログオフでそれらをすべて停止します。短期間の重複しないSSHセッションが多数ある場合、ユーザーごとのサービス管理システム全体(およびそのすべての自動起動サービス)を無用に起動およびシャットダウンすると、多くのオーバーヘッドが発生する可能性があります。これらの各SSHセッションの開始と終了。そのようなサービスマネージャーの1つであるsystemdには、これに対処するのは実際には半分しかない不完全な「長引く」メカニズムがあります。これは、ユーザーごとのサービス管理が最後のログオフ後に「長引く」ことを意味しますが、ユーザーごとのサービス管理の開始はまったく停止しません。
さらに読む
- ジョナサンデボインポラード(2016)。
/ run / user / jim / dbus
。 「地名集」。 noshガイド 。ソフトウェア。 jdebp.eu。 - ジョナサンデボインポラード(2016)。 「ユーザーごとのユーザーサービス」。 noshガイド 。ソフトウェア。 jdebp.eu。
- gnome-terminalの真の複数プロセスインスタンスを実行する
- ユーザーsystemdサービスを永続化する
- https://unix.stackexchange.com/a/323700/5132