Я вошел в систему удаленно через 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/passwd
outside /home
, но не такие случаи, как у меня, где /home/gilles
есть символическая ссылка.
решение2
Была та же проблема, и ваш ответ указал мне правильное направление. Я нашел другое решение, которое не требует редактирования конфигурации apparmor. Вместо использования символической ссылки для перенаправления доступа к /home
, используйте bind
опцию на mount
. Я добавил следующую строку в /etc/fstab
:
/elsewhere/home /home none bind
Как только вы это сделаете, apparmor даже не будет знать, что каталоги ниже /home
«на самом деле» расположены где-то в другом месте, поэтому жалобы исчезнут.
Преимущество этого подхода в том, что он будет работать для всех приложений, без необходимости редактировать отдельный файл конфигурации apparmor для каждого из них.