질문
내 컴퓨터(Ubuntu 18.04)에서는 man
콘솔에서 페이지를 잘 볼 수 있습니다.
man --html
그런데 ( man -H
)나 man --gxditview
( man -X
)가 제대로 작동 하지 않는 것 같아요 .
무엇이 잘못되었는지에 대한 힌트가 있는 사람이 있습니까?
관련 기사
- https://askubuntu.com/a/339268/692420- 이것을 발견하고 나에게 필요한 것이 무엇인지 깨달았습니다
sudo apt install groff
. - https://bbs.archlinux.org/viewtopic.php?id=238227- 언급되었지만
MAN_DISABLE_SECCOMP
시도해 보았지만 내 문제가 바뀌지 않은 것 같습니다. - 매뉴얼 페이지 및 수리 매뉴얼 재설치- 패키지 재설치를 언급하고 있지만 이 사용자는
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 +
나는 또한 and를 가지고 놀려고 시도했지만 xhost +local:root
(그리고 빠르게 전화를 걸고 xhost -
/ xhost -local:root
나중에 해당 세션을 종료함) 동일한 동작을 발견했습니다.
답변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 VM에서 AppArmor가 활성화되어 있다는 사실조차 몰랐습니다. 다음 링크는 프로필을 비활성화하는 데 필요한 정보를 제공합니다.
답변2
기본 AppArmor 프로필을 완전히 비활성화하지 않으려면 /etc/apparmor.d/usr.bin.man
편집하여 필수 누락 규칙을 추가하거나/etc/apparmor.d/local/usr.bin.man
aa-notify
aa-logprof
여기에 설명된 것과 유사한 도구의 사용 및 조합우분투의 훌륭한 튜토리얼, 필요한 규칙을 찾을 수 있습니다.
# Needed by /usr/bin/man main profile:
#include <abstractions/nameservice>
capability sys_admin,
# Needed by man_groff child profile:
#include <abstractions/user-tmp>
/etc/papersize r,