`$XAUTHORITY` は su+tmux に「どこにも」現れません。

`$XAUTHORITY` は su+tmux に「どこにも」現れません。

su+bashからに切り替えたとき、変数が6つのランダムな英数字で定義されてsu+tmux+zshいることがわかりました。 Xは、以前の設定を使用してルートと完全に動作しましたが、今は 。$XAUTHORITY/root/.xauthXXXXXXXXXXXX~username/.Xauthority$XAUTHORITY

変数が定義されていません。などを確認しました.zshrc/etc/profile*/etc/profile.d/*

# env
TERM=screen
SHELL=/usr/bin/tmux
USER=toor
TMUX=/tmp//tmux-0/default,6495,3
PATH=/sbin:/bin:/usr/sbin:/usr/bin
PWD=/root
SHLVL=2
HOME=/root
LOGNAME=toor
DISPLAY=:0.0
XAUTHORITY=/root/.xauthUSzLl4
COLORTERM=gnome-terminal
_=/bin/env
OLDPWD=/root
EDITOR=vim
vcs_info_msg_0_=
vcs_info_msg_1_=

% echo $XAUTHORITY 
/home/mpiechotka/.Xauthority
% su 
password:
# echo $XAUTHORITY 
/root/.xauthUSzLl4
# ls $XAUTHORITY
ls: cannot access /root/.xauthUSzLl4: No such file or directory
# cat .tmux.conf 
set -g default-command /bin/zsh
set -g default-shell /bin/zsh

suエイリアスで、シェルで開きますsu - toortmuxtoor は、他のシェルを使用するルートのエイリアスです。

普通のsuにも出てくるのを見つけました。しばらく前はそうではありませんでした。

set-environment動作しません。

xhost +localhost動作しませんがxhost +(すべてのコントロールを無効にすると)動作します。

答え1

これが私の考えに起こっていることだ。

suand を使用するとbash-session は、suand を除く環境を継承するので、まだを指し、すべてが正常です。しかし(以USERHOMESHELLXAUTHORITY~username/.Xauthority男性ページ)、tmuxサーバーが起動したとき:

... tmuxは環境をさらにグローバル環境にコピーし、セッションごとのセッション環境を持ちます。ウィンドウが作成されると、セッション環境とグローバル環境がマージされ、セッション環境は両方の環境に存在するすべての変数をオーバーライドします。

私は(通話の詳細を知らずに)資格情報を切り替えるときに検索しようsu.Xauthorityし、/rootアプリケーションを実行する必要があるときに資格情報が見つからないため、X資格情報を生成すると疑います。この問題を解決するためのいくつかの方法を考えてみましょう。

  1. suを使用して呼び出されますsu -。実際のユーザー環境を複製します。
  2. set-environment <name> <value>設定に追加しますtmux

残念ながら、最近切り替えたのでこれをテストすることはできません。i3(すごいです)そしてバックアップマシンもありません。

答え2

構成エラーが原因である可能性があります。pam_xauthPAMモジュール。実行すると、キーが一時ファイルにコピーされますsu。説明する動作は、pam_xauthが一時ファイルを生成しても何らかの方法でキーをコピーしないことと一致します(おそらくaまたは~/.xauth/exportaがあるため/root/.xauth/import)。

答え3

これが私に起こりましたが、今回は$ COLORTERM変数でした。

たとえば、COLORTERM=terminus を使用して端末エミュレータで tmux を起動し、後で通常 COLORTERM=gnome-terminal を使用する別の端末クライアントで別の tmux セッションを開始すると、この新しいセッションはクロスして COLORTERM=terminus を継承します。 。

残念ながら、これらの主張は、他の端末エミュレータを使用してもtmuxセッションが互いに隔離されないという結論を下すのに十分です。

suサブシェルは、他のtmuxセッション(より具体的に作成された最初のtmuxセッション)から$ XAUTHORITYを継承できます。

関連情報