Выравнивание.Xauthority между GDM и SSH
Я столкнулся с проблемой в том, что если я запускаю Emacs в режиме демона на моей удаленной системе, то в моей локальной системе я запускаю ssh remotehost emacsclient -c
, происходит сбой при отклонении соединения X11 из-за неправильной аутентификации. Тем не менее, такие вещи, как ssh remotehost xterm
работает нормально, так что это никак не связано с ssh-соединениями, переадресацией X и т. д.
Обе рассматриваемые системы работают под управлением Ubuntu 18.04 LTS.
Проблема, как можно догадаться, заключается в xauth, и, в частности, после большого прочтения проблем, поданных еще в 2010/2011 гг., Это, похоже, связано с тем, как GDM устанавливает XAUTHORITY
переменная окружения $XDG_RUNTIME_DIR/gdm/Xauthority
(что-то вроде /run/user/1000/gdm/Xauthority
), в то время как входящие соединения SSH не устанавливаются XAUTHORITY
до настройки файлов cookie xauth для сеанса SSH.
Это означает, что куки ssh xauth добавляются по умолчанию $HOME/.Xauthority
файл. Мой демон Emacs не может видеть эти куки, потому что он использует GDM $XDG_RUNTIME_DIR/gdm/Xauthority
файл.
Как я уже сказал, кажется, что это несоответствие было известной проблемой в течение 8+ лет... никто не решил ее? Псих. Я написал скрипт, который устанавливает cookie, но это довольно сложно.
Есть ли способ заставить мою сессию ssh использовать файл GDM Xauthority? Я пытался установить XAUTHORITY
в моей настройке оболочки, но, видимо, это установлено слишком поздно, после того, как демон SSH настраивает новый файл cookie Xauth, потому что он все еще находится в $HOME/.Xauthority
,
1 ответ
Действительно трудно догадаться, где находится X-файл. В моем случае я закончил тем, что взломал какую-то оболочку, чтобы сделать это как часть оболочки вокруг
emacsclient
. Соответствующие биты:
fix_xauth() (
if [[ -z "$XDG_RUNTIME_DIR" ]]; then return; fi
if [[ ! -e "$HOME/.Xauthority" ]]; then return; fi
shopt -s nullglob; shopt -u failglob
for xauth in "$XDG_RUNTIME_DIR/"{".mutter-Xwaylandauth"*,"gdm/Xauthority"}; do
if [[ ! -f "$xauth" ]]; then continue; fi
xauth -f "$xauth" merge "$HOME/.Xauthority"
done
)