man --html
和 man --gxditview
退出並出現錯誤?
問題
在我的機器(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
or時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 +
andxhost +local:root
(並在此後快速呼叫xhost -
/xhost -local:root
並終止這些會話),但發現了相同的行為。
修復 Ubuntu 18.04.4 LTS
跑步
BROWSER=firefox man --html cp
在一個終端視窗和
tail -f /var/log/syslog
在另一個視窗中顯示了我的 VM 中的以下輸出:
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 中處於活動狀態。這些連結為我提供了禁用配置文件的資訊: