Ubuntuは、XRDPセッションを介してアクセスすると、異なるPATHを持ちます


9

Noob here:問題があります。SSH経由でサーバーにアクセスすると、$ PATHが正しいです

root@ks391320:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

しかし、XRDPセッションを介してサーバーを開いてターミナルに移動すると、正しくないPATHが表示されます。

root@ks391320:~# echo $PATH
/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin

両方のスクリーンショット: スクリーンショット

そして、「パッケージインストーラー」を使用して何かをインストールしようとすると、このエラーが表示されるため、これにより問題が発生します

dpkg: warning: 'ldconfig' not found in PATH

回答:


7

Ubuntu-18.04の場合、/etc/pam.d/xrdp-sesman 最初に次の行を編集 して入力します。

session       required   pam_env.so readenv=1 envfile=/etc/environment
session       required   pam_env.so readenv=1 envfile=/etc/default/locale

はい、これがないと、xrdpセッションに/etc/environment
wisbucky

5

1

システム全体のデフォルトPATHは、で定義されてい/etc/environmentます。まず、適切な値に設定されていることを確認します。参考までに、これはデフォルトのインストールと同じです。

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

2

/etc/environmentが正気で問題が解決しない場合は、でデフォルトのPATHを上書きできます~/.bashrc。たとえば、これが私の.bashrcにあり、ディレクトリが存在し、まだPATHにない場合にのみ、PATHにディレクトリを追加します。

if [ -d "$HOME/bin" ]; then
    if [[ $PATH =~ $HOME/bin ]]; then :
    else export PATH="$HOME/bin:$PATH"
    fi
fi

スクリーンショットからrootログインを有効にしたように見えるので、rootの.bashrcも設定してください。(ちなみに、Ubuntuではデフォルトでrootはログインできないため、この構成はおそらくテストが少なく、問題に関連している可能性があります。)

最初の2つの方法が失敗した場合は、XRDPクライアントがエキゾチックな何かを行っているかどうかを確認してください。その場合は、正常に動作するように構成するか、それを回避する方法を特定する必要があります。

更新

私はシステムの周りを見回してきました。次のコマンドでPATHを指定するシステム上のすべての場所を見つけることができます(通常のユーザーが読み取りできないsudoファイルがあるため、この場所にあります/etc)。

sudo egrep -nr '\bPATH' /etc | less

これらの場所の多くを無視しても安全で、次のコマンドが生成されると思います。

sudo egrep -nr '\bPATH' /etc | egrep -v '^/etc/(init|rc|ppp|bash_c)' | egrep -v '^Binary' | less

可能だと思われるファイルの1つは(私は本当にそれについてあまり知りませんが)です/etc/login.defs。あなたはそれを見るかもしれません。

さらに、ドットファイルをgrepすることもできます。

egrep -nr '\bPATH' $HOME/.* | less

「環境」ファイルは正常です。正しいパスを〜/ .bashrcに追加すると、コマンドはターミナルで実行されますが、Ubuntu「パッケージインストーラー」では機能しません。問題の根本を見つけることができませんでしたが、解決策はあります。/bin/に必要な各プログラム(ldconfigなど)へのシンボリックリンクを作成しました...これはおそらくセキュリティ違反なので、この質問は残します誰かがより良い解決策を持っている場合に備えて開いてください。
Ivan Castellanos

@IvanCastellanos:AFAIKという正確な名前のプログラムはないので、「パッケージインストーラー」の意味がわかりません。パッケージをインストールするための手順を教えてください。そして、これはGUIまたはコマンドラインインストーラーですか?
Scott Severance

申し訳ありませんが、「GDebi Packpage Installer」(GUI)を意味します。
Ivan Castellanos、

@IvanCastellanos:として起動しますgksudo gdebi-gtk /full/path/to/package.debか?私はそれが少しうるさいことがわかりました。その場合は、起動元の環境を継承する必要があります。
Scott Severance 2012年

3

完全な開示:私はUbuntuを使用していません...しかし、Debianでも同じ問題がありました。

xrdpは/etc/xrdp/startwm.shを起動します(Ubuntuがこの場所を変更していない場合)。私はこの行を追加しました:

. /etc/profile

/etc/xrdp/startwm.shの先頭に移動し、PATHが正しく設定されるようになりました。

Ubuntuの場合、追加

. /etc/environment

/etc/xrdp/startwm.shの先頭にある場合も同様です。


2

これもしばらくの間私を困らせました。 /etc/environmentはシェルスクリプトではないため、1つとして呼び出すことはできません。私にとってうまくいったのは、pamでxrdpセッションマネージャの「sesman」スクリプトを編集することでした。/etc/pam.d/sesmanファイルに「セッション」行を追加しました:

#%PAM-1.0
session required pam_env.so readenv=1 user_readenv=0
@include common-auth
@include common-account
@include common-session
@include common-password

これにより、セッションマネージャ/etc/environmentはログイン時にファイルをロードします。


1

理論的には

. /etc/environment

機能しますが、機能しません。問題を修正するために.bashrcの上部に配置するだけです


1

以前の回答のおかげで、私はそのような解決策を見つけました:

cat /etc/xrdp/startwm.sh | sed "s/. \/etc\/X11\/Xsession/. \/etc\/environment/" > ./startwm.sh && echo ". /etc/X11/Xsession" >> ./startwm.sh && sudo mv ./startwm.sh /etc/xrdp/startwm.sh && sudo chmod 755 /etc/xrdp/startwm.sh

最適ではないかもしれませんが、機能しています(Ubuntu 12.04)。


1

@ジョン:あなたはあなたの/etc/xrdpstartwm.shをチェックする必要があると信じています-私の最初の行は読み取り、

if [ -f /etc/X11/xinit/xinitrc ]
then
    . /etc/X11/xinit/xinitrc
    exit 0
fi**

つまり、/ etc / X11xinit / xinitrcが存在する場合は、そのファイルが代わりに実行されます。

. /etc/environment

/etc/xrdpstartwm.shに。:-)

/ヘルツあたり

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.