PATH
Gnomeでは、GUIアプリケーションはそれを実行したシェルプロセスを継承しませんか?明らかに、GUIアプリケーションは.Consoleアプリケーションに問題がないことだけを知ることPATH
ができます。~/.profile
Bashセッションで現在利用可能なGUIアプリケーションを実行すると、PATH
実行は失敗します。たとえば、
- Thunderbirdがライブラリを見つけることができません
libxpcom.so
(そのフォルダにあります)。ただし、which
コマンドはライブラリを探します(フォルダがあるためPATH
)。 - Firefoxは次のように失敗します。「Mozilla ランタイムが見つかりません。」
追加しても問題は解決PATH
しません。LD_LIBRARY_PATH
しかし、もし私が:
- Gnomeセッションを確立し
PATH
て再起動してください。~/.profile
- または、アプリケーションを起動する前に、そのアプリケーションのフォルダに切り替えます。
その後、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
非常によく解析します。たぶん私の中に互いに隠されているライブラリがありますか?何があっても常に空です。firefox
thunderbird
PATH
LD_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が表示されます。