GUIアプリケーションは親コンソールアプリケーションからPATHを継承しません。

GUIアプリケーションは親コンソールアプリケーションからPATHを継承しません。

PATHGnomeでは、GUIアプリケーションはそれを実行したシェルプロセスを継承しませんか?明らかに、GUIアプリケーションは.Consoleアプリケーションに問題がないことだけを知ることPATHができます。~/.profile

Bashセッションで現在利用可能なGUIアプリケーションを実行すると、PATH実行は失敗します。たとえば、

  • Thunderbirdがライブラリを見つけることができませんlibxpcom.so(そのフォルダにあります)。ただし、whichコマンドはライブラリを探します(フォルダがあるためPATH)。
  • Firefoxは次のように失敗します。「Mozilla ランタイムが見つかりません。」

追加しても問題は解決PATHしません。LD_LIBRARY_PATH

しかし、もし私が:

  1. Gnomeセッションを確立しPATHて再起動してください。~/.profile
  2. または、アプリケーションを起動する前に、そのアプリケーションのフォルダに切り替えます。

その後、Bashセッションで問題なくGUIアプリケーションを実行できます。実際、現在私は2番目のプロセスをシミュレートするスクリプトを使用しています。

問題は何ですか? GUIアプリケーションランチャーを使用する必要がありますか?

PATH私はそれに私の慣習を適用したくないので、~/.profileこの質問です。

関心をお寄せいただきありがとうございます。

環境:

  • Debian GNU/Linux: 6.0.7
  • GNOMEバージョン:2.30.2

編集する:Gnomeがどのように始まるのかわかりません。 GUIでDebianをインストールしましたが、デフォルトではグラフィカルログイン画面の後にGnomeが起動します。

Bashは、「gnome-terminal --full-screen」コマンドを介してGnomeパネルから起動します。

編集2:

Bobの提案のおかげで、私は実行しようとしましたbash --norc。つまり、デフォルト設定としてBashを使用し、ThunderbirdとFirefoxに手動でパスを追加しました。 - これで、両方のアプリケーションが正常に実行されます。この問題をどのように解決できますか?私~/.bashrcはちょうどサプリメントですPATH。さらに、このコマンドは両方ともwhich非常によく解析します。たぶん私の中に互いに隠されているライブラリがありますか?何があっても常に空です。firefoxthunderbirdPATHLD_LIBRARY_PATH

コメント作成者が提案したように、各GUIアプリケーションに実行スクリプトを提供することが解決策であると思います。

答え1

これに対する混乱の多くは、Linuxディストリビューションによって異なるためです。一般的に言えば...

  • / etc / profileは起動時にのみ取得されます。
  • /etc/profile は /etc/profile.local (存在する場合) から始まります。
  • /root/.bashrcソース...
    • 起動時 /etc/profile 以降。
    • 新しい端末セッションを開くとき。
  • ターミナルセッションコマンドラインに入力されたコマンドのみが使用されます。/root/.bashrcに設定します。
  • GnomeなどのGUIで実行されるスクリプトやプログラムで使用されます。/etc/profileに設定
  • /etc/profileが/etc/profile.localを実行すると(存在する場合)、変更および追加されます。通常そこで行うのが最善です。すべてのサブシェルが表示できるように、「PATH エクスポート」を覚えておいてください。

私はこれがUbuntu 10.04ベースのPuppy Linux 5.2.8 Lupuの動作であることを知っています。

$HOME/.profile (/etc/profile システム全体のスクリプトに似たユーザースクリプト) に設定された PATH が、Gnome のような非ターミナルセッションに適用されると思うかもしれませんが、そうではありません。 Xwindows GUIやさまざまなディスプレイマネージャなど(Gnomeなど)はターミナルセッションと並行して実行されるため、$ HOME / .bashrc設定を継承しません。

ほとんどのプログラムは、必要に応じてPATHのリセットを担当しているようです。次のコマンドは、「PATH =」...を含む数十または数百のファイルを表示します。

grep -r 'PATH=' /etc/*

問題との関連性の説明

マイコンピュータの現在のプロセス階層は、コマンドの編集された出力に表示されます。

ps -efH | cut -c49-126
----------------------
/bin/busybox init
  /bin/sh /usr/bin/xwin
    /usr/bin/xinit /root/.xinitrc -- -br -nolisten tcp
      X :0 -br -nolisten tcp
      openbox
        /bin/ash /sbin/pup_event_frontend_d
          sleep 2
  /usr/local/apps/ROX-Filer/ROX-Filer -p /root/Choices/ROX-Filer/PuppyPin
    roxterm
      gnome-pty-helper
      -sh
      -sh
      -sh
      -sh
      -sh
      -sh
        ps-FULL -efH
        cut -c49-126
    geany
  • ほとんどのシステムでは、出力の最初の行は「init」ですが、Puppyはこれらのコマンドの多くを「busybox」に置き換えます。
  • Xwindows サブシステムを起動する「xwin」は「init」によって実行されます。
  • 下に移動すると、ROX-Filerはデスクトップマネージャとして機能し、「xwin」と同じレベルにあり、「roxterm」は「gnome-terminal」に似ており、「-sh」プロセスは私が使用している複数のbash端末セッションです。以下に開くタブがあります。
  • Geanyは、XwinやROX-Filerと同じレベルで実行されているGUIエディタです。

エクスポートされた環境変数(PATHなど)は、それを開始したプロセス(「親プロセス」など)からのみ継承されます。 ps出力には表示されませんが、/etc/profile(および/etc/profile.local)は「init」起動プロセス中に読み取られた多くのスクリプトの1つなので、「xwin」はここで設定されたPATHを見ることができます。しかし.bashrcはいいえこれらのスクリプトの1つに設定されたPATHは、他のGUIプログラムでは表示されません。

GUIプログラム会議bashコマンドラインから実行すると、.bashrc PATHが表示されます。

関連情報