質問
マイコンピュータ(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
ここで説明したものと同様のツールの使用と組み合わせUbuntuの素晴らしいチュートリアル、必要なルールを見つけることができます。
# 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,