`man --html` и `man --gxditview` выходят с ошибками?

Проблема

На моей машине (Ubuntu 18.04) я могу нормально просматривать справочные страницыв консоли.

Однако я не могу получить man --html( man -H) или man --gxditview( man -X) на работу.

Кто-нибудь может предположить, что не так?

Related Posts

  • https://askubuntu.com/a/339268/692420— нашел это, чтобы понять, что мне нужно sudo apt install groff.
  • https://bbs.archlinux.org/viewtopic.php?id=238227— упоминает MAN_DISABLE_SECCOMP, но я попробовал и, похоже, моя проблема не изменилась.
  • Переустановить справочные страницы и исправить man— здесь упоминается переустановка пакетов, но этот пользователь даже не смог просмотреть man cpна консоли.
  • Для других сообщений, которые я искал и нашел, у них просто были проблемы с их DISPLAY. В данном случае, я чувствую, что упустил эту возможность, открыв firefoxи gxditviewсами по себе.

Возможные обходные пути

Я предполагаю, что мог бы использовать что-то вроде man2htmlв других сообщениях, но если возможно, я бы предпочел сначала узнать, как исправить "встроенную" настройку.

Также есть yelp man:cp, предложенный из упомянутого выше поста, который выглядит очень красиво, так что, вероятно, пока останусь с ним (но надеюсь, что внешние ссылки там есть ...)

Воспроизведение

Я "минимизировал" переменные среды с помощью следующей команды:

$ alias bash-isolate='env -i HOME=$HOME DISPLAY=$DISPLAY SHELL=$SHELL TERM=$TERM USER=$USER PATH=/usr/local/bin:/usr/bin:/bin bash --norc'
$ bash-isolate

# In isolated session
$ env | sort
DISPLAY=:1
HOME=/home/eacousineau
PATH=/usr/local/bin:/usr/bin:/bin
PWD=/home/eacousineau
SHELL=/bin/bash
SHLVL=1
TERM=screen
USER=eacousineau
_=/usr/bin/env

Все мои примеры будут опубликованы, начиная с этой среды.

Здесь показано, что manнормально работает:


$ man cp | head -n 4
CP(1)                                       User Commands                                      CP(1)

NAME
       cp - copy files and directories

Однако, когда я пытаюсь вызвать man --html=/usr/bin/firefoxили man -- gxditview, я получаю следующее:

$ which groff
/usr/bin/groff

$ firefox
# A window opens up fine and dandy.

$ man --html=/usr/bin/firefox cp
Unable to init server: Could not connect: Connection refused
Error: cannot open display: :1
man: couldn't execute any browser from /usr/bin/firefox

$ gxditview
# A window opens up fine and dandy, also.

$ man --gxditview cp
groff: gxditview: Signal 31 (core dumped)
man: command exited with status 1: (cd /usr/share/man && /usr/lib/man-db/zsoelim) | (cd /usr/share/man && /usr/lib/man-db/manconv -f UTF-8:ISO-8859-1 -t UTF-8//IGNORE) | (cd /usr/share/man && preconv -e UTF-8) | (cd /usr/share/man && tbl) | (cd /usr/share/man && groff -mandoc -TX75 -X)

Если я запускаю те же команды, но перед ними export MAN_DISABLE_SECCOMP=1, я не вижу разницы в поведении:

$ export MAN_DISABLE_SECCOMP=1
$ env | sort
DISPLAY=:1
HOME=/home/eacousineau
MAN_DISABLE_SECCOMP=1
PATH=/usr/local/bin:/usr/bin:/bin
PWD=/home/eacousineau
SHELL=/bin/bash
SHLVL=1
TERM=screen
USER=eacousineau
_=/usr/bin/env

$ man --html=/usr/bin/firefox cp
# Same as above.
$ man --gxditview cp
# Same as above.

Я также пытался использовать xhost +и xhost +local:root(и быстрый вызов xhost -/ xhost -local:rootи после этого завершение этих сеансов) , но обнаружил такое же поведение.

3
20.06.2020, 22:42
1 ответ

Исправление для Ubuntu 18.04.4 LTS

Работает

BROWSER=firefox man --html cp

в одном окне терминала и

tail -f /var/log/syslog

в другом окне показал следующий вывод в моей виртуальной машине:

Jun 20 22:25:00 redacted kernel: [186784.927254] audit: type=1400 audit(1592684700.904:81): apparmor="DENIED" operation="file_inherit" profile="man_groff" name="/tmp/hmanwJkIBp/cp.html" pid=6943 comm="preconv" requested_mask="w" denied_mask="w" fsuid=1000 ouid=1000
Jun 20 22:25:00 redacted kernel: [186784.960191] audit: type=1400 audit(1592684700.936:82): apparmor="DENIED" operation="file_inherit" profile="man_groff" name="/tmp/hmanwJkIBp/cp.html" pid=6944 comm="tbl" requested_mask="w" denied_mask="w" fsuid=1000 ouid=1000
Jun 20 22:25:00 redacted kernel: [186785.004522] audit: type=1400 audit(1592684700.980:83): apparmor="DENIED" operation="file_inherit" profile="man_groff" name="/tmp/groff-regions-GzqhRi" pid=6952 comm="troff" requested_mask="w" denied_mask="w" fsuid=1000 ouid=1000
Jun 20 22:25:01 redacted kernel: [186785.022296] audit: type=1400 audit(1592684700.992:84): apparmor="DENIED" operation="open" profile="man_groff" name="/etc/papersize" pid=6952 comm="troff" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
Jun 20 22:25:01 redacted kernel: [186785.652245] audit: type=1400 audit(1592684701.628:85): apparmor="DENIED" operation="connect" profile="/usr/bin/man" pid=6958 comm="firefox" family="unix" sock_type="stream" protocol=0 requested_mask="send receive connect" denied_mask="send connect" addr=none peer_addr="@/tmp/.X11-unix/X0" peer="unconfined"
Jun 20 22:25:01 redacted kernel: [186785.654920] audit: type=1400 audit(1592684701.632:86): apparmor="DENIED" operation="connect" profile="/usr/bin/man" pid=6961 comm="firefox" family="unix" sock_type="stream" protocol=0 requested_mask="send receive connect" denied_mask="send connect" addr=none peer_addr="@/tmp/.X11-unix/X0" peer="unconfined"

означает apparmor, а профили man_groffи /usr/bin/manкаким-то образом задействованы в неработающей команде -.

Запуск sudo aa-status | grep manдействительно выводит:

   /usr/bin/man
   /usr/lib/connman/scripts/dhclient-script
   man_filter
   man_groff

Чтобы отключить профиль manи удалить определение AppArmor из ядра, запустите

sudo ln -s /etc/apparmor.d/usr.bin.man /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.bin.man

и снова проверьте вывод sudo aa-status | grep man. Записи /usr/bin/man, man_filterи man_groffдолжны быть удалены.

Затем запустите

BROWSER=firefox man --html cp

или

man --html=firefox cp

или

MAN_DISABLE_SECCOMP=1 man --gxditview cp

и наслаждайтесь.


Примечание.:Я никогда раньше не пользовался AppArmor и даже не знал, что он активен на моей виртуальной машине Ubuntu. Эти ссылки предоставили мне информацию для отключения профиля:

  • AppArmor(Документация сообщества Ubuntu)
  • AppArmor(Документация сервера Ubuntu)
3
18.03.2021, 23:26

Теги

Похожие вопросы