私はArch Linuxを使用していて、Gnomeとi3ウィンドウマネージャーの両方をインストールしています。 i3を実行しているときに、コンポジットマネージャーComptonを起動しようとしています。しかし、そうしようとすると、次のエラーが発生します。
$ compton
[ 04/11/2019 22:32:36.443 register_cm FATAL ERROR ] Another composite manager is already running
これは、Comptonがすでに実行されているか、Mutterが実行されていることを意味すると思いますが、どちらが実行されているかはわかりません。
現在実行されているComposite Managerを判別するために使用できるコマンドはありますか?
inxi を使用できます。
inxi -Gxx | grep compositor
出力は次のようになります
alternate: ATI,fbdev compositor: compton resolution: <xdpyinfo missing>
コンプトンがコンポジターとして現在使用されていることがわかります。コンポジターがない場合、grepの一致はありません。
スイッチ:
-G
グラフィック情報を表示します(カード、ドライバー、ディスプレイプロトコル(利用可能な場合)、ディスプレイサーバー、解像度、レンダラー、OpenGLバージョン)。-xx
追加の追加データを表示します。 (-G
、チップベンダーを表示:各ビデオカードの製品ID。 OpenGL互換バージョン。 compositor(実験的);代替Xorgドライバー。ComptonもMutterもインストールしていませんが、xcompmgr
サンプルXコンポジションマネージャーは、別のコンポジションマネージャーが実行されているかどうかを判断する必要はありませんが、続行してXCompositeRedirectSubwindows()
を呼び出すだけです。 XSetErrorHandler
でインストールされたハンドラで、それによって生成される可能性のあるエラーを処理します。
_static int
error (Display *dpy, XErrorEvent *ev)
{
...
if (ev->request_code == composite_opcode &&
ev->minor_code == X_CompositeRedirectSubwindows)
{
fprintf (stderr, "Another composite manager is already running\n");
exit (1);
_
これはそれを行う唯一の可能な方法のようです: XCompositeGetOverlayWindow()
は常に成功し、mapオーバーレイウィンドウがすでにあるかどうかにかかわらず使用中かどうか:
CompositeGetOverlayWindow
このリクエストは、クライアントがこの画面のコンポジットオーバーレイウィンドウを使用したいことを示しています。このコンポジットオーバーレイウィンドウがまだマップされていない場合は、このリクエストによってマップされます。
注:
Mutterは、個別のプロセスとしてではなく、動的ライブラリ(通常はgnome-Shellによって読み込まれる)として実装されます。
_grep -sl mutter /proc/*/maps
_
linuxでは、それを使用しているすべてのプロセスが検出されます。
anyコンポジターが現在実行されているかどうかを知るコマンドは、私の知る限りありません。ただし、pgrep
を使用して、givenコンポジターが現在実行されているかどうかを確認できます。
$ pgrep compton
18169
pgrep
はPIDを提供するので、kill
を使用してプロセスを終了できます。
$ kill 18169
または、pkill
は、PIDの代わりにプロセス名を入力することでプロセスを終了できます。
$ pkill compton
一部のコンポジター(Xfceのような)を非アクティブ化するには、別のアプローチが必要になる場合があります。
$ xfwm4 --compositor=off --replace