すでに実行中のXセッション内から2番目のXサーバーを起動したいと思います。
Debian 8までは、/etc/X11/Xwrapper.config
を編集して、行allowed_users=console
をallowed_users=anybody
に変更できます。これにより、非特権ユーザーとしてX内からXを実行できます。XはXorgのsetuidラッパーです。
Debian 9で変更されたもの、Xはsetuidラッパーではなくなり、代わりにXに必要な特権はsystemdによって制御されます。ファイル/etc/X11/Xwrapper.config
はもう存在しません。
パッケージxserver-xorg-legacy
を使用してレガシー動作を復元することができます。次に、/etc/X11/Xwrapper.config
に行を含める必要があります
allowed_users=anybody
needs_root_rights=yes
もう1つの可能性は、tty1 ... tty6のいずれかに切り替えて、Xをxinit xterm -- :1 vt1
で実行し、vt1 ... vt6はtty1 ... tty6に準拠する必要があることです。 (tty8 ... tty12/vt8 ... vt12は使用できなくなりました。)
従来の設定の使用を避け、コンソールへの切り替えを避けたい。 xinit xterm -- :1 vt8
の可能性を取り戻したい。
特権のないユーザーがすでに実行中のX内から2番目のXサーバーを起動できるようにsystemdを設定するにはどうすればよいですか?
xinit
は脆弱であるため、使用しないことをお勧めします。代わりにstartx
を使用してください。 xinit
は、警告やドキュメントなしで、任意のユーザーIDからのX接続を受け入れるように記述されているようです。 startx
はこれを修正しているようです。なぜこの状況が許容されるのか、そもそもどのように起こったのかはわかりません。
ルートとして:
systemd-run --property PAMName=login \
--property User=my-user \
--property StandardInput=tty \
--property TTYPath=/dev/tty8 \
sh -c 'chvt 8 && startx /usr/bin/xterm -- :1'
魔法は、PAMName=
を定義して、PAMセッションを開き、そのセッションを特定のTTYに関連付けることです。これにより、 pam_systemd が必要な処理を実行します。私はlogin
を偽装しましたが、技術的には、特別な処理が必要な場合に備えて、新しいPAM「サービス名」を定義することになっています。
したがって、目的のコマンドを実行するスクリプトを作成できます。次に、Sudo
を使用して、そのスクリプトをrootとして実行するためのアクセスを許可します。
SELinuxを使用している場合は、それと戦う必要があります。