web-dev-qa-db-ja.com

実行中の複合マネージャーを判別する方法

私は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を判別するために使用できるコマンドはありますか?

2
wxyz

inxi を使用できます。

inxi -Gxx | grep compositor

出力は次のようになります

           alternate: ATI,fbdev compositor: compton resolution: <xdpyinfo missing> 

コンプトンがコンポジターとして現在使用されていることがわかります。コンポジターがない場合、grepの一致はありません。

スイッチ:

  • -Gグラフィック情報を表示します(カード、ドライバー、ディスプレイプロトコル(利用可能な場合)、ディスプレイサーバー、解像度、レンダラー、OpenGLバージョン)。
  • -xx追加の追加データを表示します。 (-G、チップベンダーを表示:各ビデオカードの製品ID。 OpenGL互換バージョン。 compositor(実験的);代替Xorgドライバー。
2
Codebling

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では、それを使用しているすべてのプロセスが検出されます。

1
mosvy

anyコンポジターが現在実行されているかどうかを知るコマンドは、私の知る限りありません。ただし、pgrepを使用して、givenコンポジターが現在実行されているかどうかを確認できます。

$ pgrep compton
18169

pgrepはPIDを提供するので、killを使用してプロセスを終了できます。

$ kill 18169

または、pkillは、PIDの代わりにプロセス名を入力することでプロセスを終了できます。

$ pkill compton

一部のコンポジター(Xfceのような)を非アクティブ化するには、別のアプローチが必要になる場合があります。

$ xfwm4 --compositor=off --replace
0
nxnev