Выравнивание.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
)
Другие вопросы по тегам