Evince не запускается, так как не может прочитать .Xauthority

Evince не запускается, так как не может прочитать .Xauthority

Я вошел в систему удаленно через SSH с перенаправлением X на машину под управлением Ubuntu 10.04 (lucid). Большинство приложений X11 (например, xterm, gnome-terminal) работают нормально. Но Evince не запускается. Похоже, он не может прочитать ~/.Xauthority, хотя файл существует и, очевидно, доступен для чтения (у него есть нужные разрешения, и другие приложения его прекрасно читают).

$ evince
X11 connection rejected because of wrong authentication.
Cannot parse arguments: Cannot open display:
$ echo DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY
DISPLAY=localhost:10.0 XAUTHORITY=
$ strace evince
access("/home/gilles/.Xauthority", R_OK) = 0
open("/home/gilles/.Xauthority", O_RDONLY) = -1 EACCES (Permission denied)
$ ls -l ~/.Xauthority
-rw------- 1 gilles gilles 496 Jul  5 13:34 /home/gilles/.Xauthority

Что такого особенного в Evince, что он не может читать ~/.Xauthority? Как мне заставить его начать?

решение1

TL,DR: это вина Apparmor, и из-за того, что мой домашний каталог находится за пределами /home.

В стандартной установке Ubuntu 10.04аппармоПакет втягивается как косвенная зависимость уровня «Рекомендации»ubuntu-стандартpackage. Системные журналы ( /var/log/syslog) показывают, что Apparmor отклоняет попытку Evince прочитать ~/.Xauthority:

Jul 5 17:58:31 darkstar kernel: [15994724.481599] type=1503 audit(13415 03911.542:168): operation="open" pid=9806 parent=9805 profile="/usr/bin/evince" requested_mask="r::" denied_mask="r::" fsuid=1001 ouid=1001 name="/elsewhere/home/gilles/.Xauthority"

Конфигурация Evince по умолчанию для Apparmor (в /etc/apparmor.d/usr.bin.evince) очень разрешительная: она разрешает произвольные чтения и записи во всех домашних каталогах. Однако мой домашний каталог на этой машине — это символическая ссылка на нестандартное местоположение, которое не указано в конфигурации AppArmor по умолчанию. Доступ разрешен в /home, но реальное местоположение моего домашнего каталога — /elsewhere/home/gilles, поэтому доступ запрещен.

Другие приложения, которые могут быть затронуты этой проблемой, включают:

  • Firefox, но его профильотключено по умолчанию(по наличию символической ссылки /etc/apparmor.d/disable/usr.bin.firefox -> /etc/apparmor.d/usr.bin.firefox).
  • Печать PDF-файлов CUPS; я не тестировал, но предполагаю, что запись в файлы ~/PDF.

Моим решением было отредактировать /etc/apparmor.d/tunables/home.d/localи добавить строку

@{HOMEDIRS}+=/elsewhere/home/

для распознавания нестандартного расположения домашних каталогов (обратите внимание, что финал /важен; см. комментарии в /etc/apparmor.d/tunables/home.d/ubuntu), затем запустите /etc/init.d/apparmor reloadдля обновления настроек Apparmor.

Если у вас нет прав администратора, а системный администратор не отвечает, вы можете скопировать двоичный файл evinceв другое место, например ~/bin, , и на него не будет распространяться политика Apparmor (поэтому вы сможете запустить его, но не получите той ограниченной дополнительной безопасности, которую обеспечивает Apparmor).

Эта проблема была зарегистрирована какОшибка Ubuntu №447292. Разрешение обрабатывает случай, когда у некоторых пользователей домашний каталог указан в /etc/passwdoutside /home, но не такие случаи, как у меня, где /home/gillesесть символическая ссылка.

решение2

Была та же проблема, и ваш ответ указал мне правильное направление. Я нашел другое решение, которое не требует редактирования конфигурации apparmor. Вместо использования символической ссылки для перенаправления доступа к /home, используйте bindопцию на mount. Я добавил следующую строку в /etc/fstab:

/elsewhere/home /home none bind

Как только вы это сделаете, apparmor даже не будет знать, что каталоги ниже /home«на самом деле» расположены где-то в другом месте, поэтому жалобы исчезнут.

Преимущество этого подхода в том, что он будет работать для всех приложений, без необходимости редактировать отдельный файл конфигурации apparmor для каждого из них.

Связанный контент