私はあなたと同じ質問をしましたが、普通のユーザーについてです。ユーザーアカウントfooを使用してfirefoxを起動したいとします。私はバーとしてログインしています:
[bar@localhost ~]$ sudo -u foo -H firefox
悲しいことに、質問と同じエラーでコマンドが失敗しました(つまり、プロトコルが指定されておらず、ディスプレイを開けません)
私の解決策は、ユーザーfooをXサーバーへの許可されたアクセスのリストに単に追加することでした。
xhost si:localuser:foo
これで、Firefox(および他のXアプリケーション)を使用して起動できました sudo
、ユーザーfooして。
背景:X Windowには、クライアント/サーバーアーキテクチャがあります。アプリケーションを起動すると、Xサーバーの承認を要求して表示します。デフォルトでは、セッションを開く(グラフィカルにログインする)と、ユーザー(ユーザー)は明らかにサーバーと通信してアプリケーションを表示することができます。指定しない限り、他のユーザーにはこの権限がありません。xhost
権限のリストを操作するツールです。これsi
は、ルールがサーバー側であり、ローカルユーザーfoo
ディスプレイ用途に。Xウィンドウはこの点で非常に強力であり、DISPLAY
環境変数and xhost
(ただしそれらに限定されない)で遊ぶことにより、リモートアプリケーションをローカルに表示できます。昔、人々がタイプしたときxhost +
暗黙的に誰もがXセッションを使用できるようにしたため、いたずらのためにアプリケーションを画面に表示することができました;-) X Windowクライアント/サーバーアーキテクチャを使用する人が少なくなっている現在ではあまりありません(少なくとも、過去10年)。
PS:Firefoxを一種の「刑務所」で起動するために(将来pdf.jsのような脆弱性を回避するために)これを行いました。しかし、sudo経由でFirefoxを呼び出すと、オーディオやビデオハードウェアにアクセスできないことがすぐにわかりました。しかし、sudo経由でFirefoxを呼び出すときに、ビデオハードウェアアクセラレーションとオーディオをアクティブにする方法を明確に説明している人がいます。YMMVとこれらの指示。たとえば、音声で拒否された許可がまだありますが、ビデオは正常です(SELinux ONでFedora 22でテスト済み)。