
GDK_NATIVE_WINDOWS
修正するには環境変数を設定する必要がありますUbuntuのEclipseボタンの問題環境変数を設定するために、 に次の行を追加しました~/.pam_environment
。
GDK_NATIVE_WINDOWS デフォルト=true
echo $GDK_NATIVE_WINDOWS
驚いたことに、端末にいるときには環境変数が設定されません。ただし、 にリストした他のすべての環境変数~/.pam_environment
は適切に設定されています。また、たとえば tty に切り替えるとAlt+Ctrl+F1
、環境変数は正しく設定されます。 でこの環境変数を設定すると何が問題になるのでしょうか~/.pam_environment
?
答え1
~/.pam_environment ファイルでは、単純な「key=value」構文に固執してください。DEFAULT、OVERRIDE、${HOME} などはありません。key=value だけです。リンクしたマニュアル ページは pam_env.conf のみを対象としています。「man 8 pam_env」を参照してください。このマニュアルには、「このモジュールは、別の行に単純な KEY=VAL ペアがあるファイルを解析することもできます。」という記述は見当たりません。
ちなみに、./pam_environmentにPATH=${PATH}:more/pathsのようなものを入れると、PATHが${PATH}:more/pathsに設定されるため、ほぼすべてのログイン試行を阻止するのに最適な方法です。文字通り(そこにはあまり見つかりません)。復旧するには、「/bin/mv .pam_environment out_of_the_way」を実行して再度ログインします。
答え2
ご指摘のとおり、環境変数は~/.pam_environment
推奨されているとおりに設定する必要があります。https://help.ubuntu.com/community/環境変数言うのは簡単ですが、実行するのは難しいですね ;)
おそらく、私と同じ構成のギャップに遭遇したのでしょう。暗号化されたホームの回避策については以下を参照してください。
私の~/.pam_environment
:
PATH DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK DEFAULT=${HOME}/Applications/jdk
なぜ醜い静的パスなのか?${PATH}
私にはうまくいきません。回避しようとしてログインが何度も失敗してしまったので、デフォルトの醜い静的コピーを使い続けています :)
暗号化されたホームフォルダの回避策
Ubuntuのリリースではウブントゥ 12.04/etc/pam.d/common-session
(Precise Pangolin) ベータ 2、暗号化されたホーム ディレクトリを使用している場合は、それをロードするために変更する必要があります~/.pam_environment
。このソリューションは以前のリリースでは機能するようです。ただし、テストは行っていません。
Guenther Montag (g-montag) は 2010-08-19 に次のように書きました:
これは暗号化されたホームディレクトリの問題のようです。
セッションには pam_env.so が必要です
/etc/pam.d/common-session の末尾に、~/.pam_environment が読み込まれるようになりました。ホーム ディレクトリが暗号化されていない別のシステム (10.04 も) では、回避策は必要ありません。おそらく、私の場合、システムは ~/.pam_environment を復号化する前に読み取ろうとします。
答え3
GDK_NATIVE_WINDOWS と DEFAULT=true の間にスペースがあります。これはリンクした例とは異なります。
試す:
GDK_NATIVE_WINDOWS=true
答え4
Debian bullseye (おそらく 2013 年頃まで遡る) および ubuntu の少なくとも 14.04 (docker コンテナーでテスト済み) では、pam_env の user_endir がデフォルトでオフになっているため、~/.pam_environment は読み込まれません (を参照man 7 pam_env
)。再度有効にする場合は、次の手順を実行します。
echo 'session optional pam_env.so user_readenv=1' >> /etc/pam.d/common-session
つまり、対話型セッション (CLI または su のようなグラフィカル ログイン) の場合は、user_reader を 1 にして pam_env を設定します。
アップストリームで無効化された理由は以下の通りだと思います:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-4708「Linux-PAM (別名 pam) 1.1.2 以前の pam_env モジュールは、ユーザーのホーム ディレクトリにある .pam_environment ファイルを読み取ります。これにより、ローカル ユーザーが pam_env PAM チェックに依存するプログラムを実行することで、意図しない環境でプログラムを実行できる可能性があります。」
上記の説明は私にはよく分かりません。~/.pam_environment によって、ユーザーに知られずにプログラム環境を変更できるという意味であれば、ホーム フォルダーのオプションはどれも同じです (つまり、~/.profile、~/.zprofile)。~/.profile はグラフィカル ログイン マネージャーによって読み取られることに注意してください... では、なぜ ~/.pam_environment を削除して ~/.profile を保持するのでしょうか。
適切な方法は、/etc/security/pam_env.conf でユーザーごとに環境変数を設定できるようにすることです。ただし、アップストリームではまだリクエストされていません。または、管理者権限でのみ編集可能なオプション。