2

gksu で開く c/gtk のプログラムがあります。問題は、環境変数 $HOME を getenv("HOME") で取得すると、明らかに「root」が返されることです。gksu を実行したユーザーを知る方法や、そのユーザーの環境変数を取得する方法があるかどうかを知りたいです。前もって感謝します!

4

2 に答える 2

2

マニュアルページを参照してください。環境を維持するために使用gksu -k command...します (特に、PATHHOME)。

gksu env PATH="$PATH" HOME="$HOME" command...または、Lewis Richard Phillip C が示したように、コマンドの環境変数をリセットするために使用できます。(ロジックは、ユーザー権限で実行される親シェルが変数を置換しenv、スーパーユーザー権限が取得されたときに変数を再設定するというものです。)

アプリケーションを root 権限でのみ実行する必要がある場合は、他の多くのアプリケーションと同様に、ランチャー スクリプトを作成できます。スクリプト自体は基本的に

#!/bin/sh
exec gksu -k /path/to/your/application "$@"

また

#!/bin/sh
exec gksu env PATH="$PATH" HOME="$HOME" /path/to/your/application "$@"

スクリプトは にインストールされ/usr/bin、アプリケーションは/usr/bin/yourapp-binまたはとしてインストールされます/usr/lib/yourapp/yourapp。コマンドがシェルを置き換えるexecことを意味します。つまり、コマンドが実行された後は何も実行されません (アプリケーションまたはコマンドがまったく実行できない場合を除く)。最も重要なことは、アプリケーションの実行が開始されている間、メモリに余分なシェルが存在しないことです。exec

Linux やその他の POSIX に似たシステムには、有効なID (アプリケーションが実行できる操作を定義する) と実際のID (操作を実行するユーザーを定義する) の概念がありますが、gksuすべての ID を変更します。特に、getuid()たとえば set-UID バイナリの場合は実際のユーザー ID を返しますが、 を使用するとゼロ (「ルート」) を返しますgksu

したがって、上記の起動スクリプトは、問題を解決するための推奨される方法です。これもよくあることです。走る

file -L /usr/bin/* /usr/sbin/* | sed -ne '/shell/ s|:.*$||p' | xargs -r grep -lie launcher -e '^exec /'

システムのランチャー スクリプトである (またはそれ自体がランチャー スクリプトであると宣言している) コマンドを確認するには、または

file -L /bin/* /sbin/* /usr/bin/* /usr/sbin/* | sed -ne '/shell/ s|:.*$||p' | xargs -r grep -lie gksu

gksu明示的に使用するものを確認します。既知の適切なアプローチを採用しても害はありません.. ;)

于 2013-02-27T04:42:02.827 に答える
1

これらの環境変数の値を標準変数に割り当て、gkSU の後に変数をエクスポートする gksu を実行することができます... gkSU の後に && を使用してこれらを定義し、実行をバインドすることで、基本的に複製された環境変数を使用して実行します...

より良い質問は、なぜこれを行うのかということです。いくつかのフォルダーを保持したいことはわかっていますが、ルートとして作成されたファイルは、おそらく umask を使用してグローバルに書き込み可能にする必要があるか、または手動でアクセス許可を修正するか、所有権を変更する必要がある理由がわかりません...これはそのようなものです悪い考えです!

https://superuser.com/questions/232231/how-do-i-make-sudo-preserve-my-environment-variableshttp://www.cyberciti.biz/faq/linux-unix-shellをチェックしてください-export-command/ & https://serverfault.com/questions/62178/how-to-specify-roots-environment-variable

于 2013-02-27T00:16:17.740 に答える