実行中のウィンドウマネージャーを確認する方法


180

現在のセッションでアクティブに実行されているウィンドウマネージャーを特定する方法(コマンドや環境変数など)はありますか?

回答:


145

wmctrlインストール済みの場合、コマンドからの出力の最初の行

    wmctrl -m

ウィンドウマネージャの名前が表示されます。wmctrlインストールしていない場合は、次のコマンドを使用してインストールします。

    sudo apt-get install wmctrl

man wmctrl(つまり、のmanページwmctrl)には次のように書かれています:

-mウィンドウマネージャーに関する情報を表示します...

私のUbuntu 11.10 / Linuxの3.0.0-14-一般的な#23-Ubuntuのx86_64版/ Metacityの2.34.1システムでは、出力の最初の行はwmctrl -mだった: Name: Metacity
しばらくはecho $DESKTOP_SESSIONあったubuntu-2decho $XDG_CURRENT_DESKTOP示しましたUnity

新鮮なUbuntuの15.10でのインストールUbuntu desktopから、古いノートパソコン上のソフトウェアの出力の最初の行をwmctrl -mした:Name: Compiz
ながらDESKTOP_SESSIONXDG_CURRENT_DESKTOP値であったubuntuUnity


4
残念ながら、X11が有効になっていても、これはsshでは機能しません。
シュリダールSarnobat

1
ubuntu 15.04の@ Sridhar-Sarnobatを実行すると、ssh -Y {host} 'wmctrl -m'いくつかの値(たとえば、「名前:Compiz」、およびいくつかのN / A)が返されますがssh、ウィンドウマネージャーに関する情報が限られているのは理にかなっています。
マイケル

シナモンを実行しているDebianでは、これは機能しません。wmctrl -mの出力はName:Mutter(Muffin)while $ XDG_CURRENT_DESKTOP = X-Cinnamon
フロイド

Xubuntu Wilyでは、Window Maker 0.95.6を実行しています-wmctrlはすべてのエントリについてN / Aを報告します。GDMSESSIONはwmaker-commonに設定されていますが、XDG_CURRENT_DESKTOPはまったく設定されていません。
メイ

@Mei、比較できる他のシステムでWindow Makerを実行していますか?また、 Window Makerを使用してXubuntu Wilyで(wmctrl -dウィンドウマネージャーによって管理されているすべてのデスクトップを一覧表示する)またはwmctrl -l(ウィンドウマネージャーによって管理されているウィンドウを 一覧表示する)が正常に動作しますか?
ジェームズ・ウォルドビー-jwpat7 16年

102

Linuxシステムでは、私は、環境変数をテストXDG_CURRENT_DESKTOPしてGDMSESSION、以下の結果を得ました。

次の行を使用して出力を取得できます。

printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"

Ubuntu 18.04(Ubuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 18.04(ウェイランドのUbuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu-wayland

Ubuntu 16.04


ユニティ(7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Mirで実行されているUnity

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

注MIR_SERVER_NAMEも設定されています

  • MIR_SERVER_NAME=session-$NUMBER

Mirなしで実行されているUnity

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

Unity 3D

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Unity 2d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

ノーム

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

Gnome Classic

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic(エフェクトなし)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

その他のUbuntuベースのディストリビューション


ミント13(シナモン)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

ミント16(KDEエディション)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

ミント17(シナモン)

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=default

Lubuntu 12.04

  • XDG_CURRENT_DESKTOP=LXDE
  • GDMSESSION=Lubuntu

ワスタ 14.04 / 18.04

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=cinnamon

Gnomeデスクトップを使用したWasta 14.04。

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome

Ubuntu Mate 18.04

  • XDG_CURRENT_DESKTOP=MATE
  • GDMSESSION=mate

Xubuntu 18.04

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xubuntu

4
ミント13(シナモン):XDG_CURRENT_DESKTOP = GNOME、GDMSESSION = cinnamon
rik-shaw

1
Lubuntu 12.04:XDG_CURRENT_DESKTOP = LXDE、GDMSESSION = Lubuntu
rik-shaw

$ DESKTOP_SESSIONはどうですか?バックアップソリューションとして:)
Savvas Radevic

1
GDMを使用しない場合はどうなりますか?
ロバートシーマー

6
さらに、どのウィンドウマネージャーを使用しているかはわかりません。
ロバートシーマー

42

端末タイプでenv、すべての環境変数を表示します。それらのいくつかは次のとおりです。

XDG_CURRENT_DESKTOP-使用しているデスクトップ環境を示します

GDMSESSION -lightdm greeterからログインするために選択したオプションを示します。

それらを使用するには、ターミナルに移動して次を入力します。

echo $XDG_CURRENT_DESKTOP

(Unityを使用している場合、たとえば 'unity'の出力)

または

echo $GDMSESSION  

(たとえば、ログインでubuntuを選択した場合は「ubuntu」、ログインでubuntuを選択した場合は「ubuntu-2d」が出力されます。)

DESKTOP_SESSIONCOMPIZ_CONFIG_PROFILEenvなどの出力を詳しく見ると、他の人がいます。

探しているのはWindow Managerが使用しているものの名​​前なので、これを取得する唯一の方法はプロセスリストを調べることです。これを行うには、pgrepWikipedia)というコマンドがあります。パラメーター-lがプロセスIDを追加するため、名前を取得するために次のことを行いました。

pgrep -l compiz |cut -d " " -f2プロセスは同じユーザーによって実行されているため、sudo部分にプレフィックスを付ける必要はありません。次に、これを使用して、ウィンドウマネージャーに基づいてアクションを実行するスクリプトを作成できます。

言葉だけを変更、他のタイプを探しするにはcompiz別のようにmutterkwinなど。


2
それらは単にセッション名とデスクトップ環境を教えてくれます。たとえば、Metacity、Mutter、Compiz、またはその他のウィンドウマネージャーを使用できるデスクトップ環境である「GNOME」と表示されます。セッション名である「gnome-classic」と表示されますが、その名前のウィンドウマネージャはありません。
匿名

1
行くぞ プロセスリストに役立つコマンドを見つけました。pgrep。その部分に行きました。少なくとも、ウィンドウマネージャーの名前が見つかった場合は表示されます。それらをすべて一緒に追加できるかどうかを確認しようとしています。Ubuntu 11.10はCompiz(またはGnome 3.xの場合はつぶやき)を使用して少し混乱するため、Unityで使用される実際のWindow Managerを指摘しておくとよいでしょう。
ルイスアルバラード

$XDG_CURRENT_DESKTOPウィンドウマネージャではなく、現在のデスクトップ環境です。
ケンシャープ

24

pstree大きな助けになることがわかりました。

設置

sudo apt-get install pstree

出力

これは私が得たものです。

 ├─lightdm─┬─Xorg───2*[{Xorg}]
 │         ├─lightdm─┬─gnome-session─┬─bluetooth-apple───2*[{bluetooth-apple}]
 │         │         │               ├─compiz─┬─sh───gtk-window-deco───2*[{gtk-window-deco}]
 │         │         │               │        └─5*[{compiz}]
 │         │         │               ├─deja-dup-monito───2*[{deja-dup-monito}]
 │         │         │               ├─gnome-fallback-───2*[{gnome-fallback-}]
 │         │         │               ├─gnome-screensav───2*[{gnome-screensav}]
 │         │         │               ├─gnome-settings-───2*[{gnome-settings-}]
 │         │         │               ├─nautilus───2*[{nautilus}]
 │         │         │               ├─nm-applet───2*[{nm-applet}]
 │         │         │               ├─polkit-gnome-au───2*[{polkit-gnome-au}]
 │         │         │               ├─ssh-agent
 │         │         │               ├─telepathy-indic───2*[{telepathy-indic}]
 │         │         │               ├─update-notifier───2*[{update-notifier}]
 │         │         │               ├─vino-server───2*[{vino-server}]
 │         │         │               ├─zeitgeist-datah───{zeitgeist-datah}
 │         │         │               └─3*[{gnome-session}]
 │         │         └─{lightdm}
 │         └─2*[{lightdm}]

1
これにより、カスタムbuildrootシステムが作成されました。
jc__

11
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t 

1
これがどのように機能するか説明できますか?また、)最後に行方不明になっていると思います。
ルイ・マッタイッセン

@LouisMatthijssen 1. xprop -root -notypeルートウィンドウのすべてのプロパティを表示し(解析を容易にするために型を省略します)、出力はawkパイプ経由で送信されます。2. awk命令$1=="_NET[blah]CK:"{print $5}'は、パイプを介して取得した入力の各行の最初の列を特定の文字列と比較し、一致する場合は、この行から5番目の列を印刷する括弧内のコードを実行します-偶然(完全に、 「_NET_SUPPORTING_WM_CHECK」アトムのIDになります。3.このIDは、Windowsマネージャーのプロパティを取得するために再び使用されますxprop -id
cprn

4

私もKDEでテストしてきましたが、結論は次のとおりです。

a)HardInfoを使用したグラフィカルな方法:答えは通常、「オペレーティングシステム」>「デスクトップ環境」にありますが、そうでない場合は「環境変数」を確認できます。HardInfoには、KDEを除くすべてのテスト済みディストリビューションが用意されていますが、簡単かつ迅速にインストールできます(Linux Mint 13では2パッケージのみ)。

b)は、このコマンドを使用して、コマンドライン、: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm"。より多くの行に表示されるアイテムが答えになるはずです(ドローがある場合は、「セッション」を含むアイテムを解決する必要があります)。


XFCEにもいくつかのgnome-...プロセスがあります(およびでkdeヒットkdevtmpfs
Xen2050

2

上記のどれも実際にはうまくいきませんでした。Gnomeを現在のデスクトップセッションとして実行していたかどうかを知りたかっただけです。

これが機能したので、ターミナルを開きます

lsb_release -a

(UBUNTUマシンにインストールしたフレーバーまたはバージョンを確認するため)

ls /usr/bin/*session

(現在使用中のデスクトップセッション/デスクトップ環境を起動します)

gnome-shell --version 

(インストールされているgnomeのバージョンを確認するため)


1
#! /bin/bash
#  (GPL3+) Alberto Salvia Novella (es20490446e.wordpress.com)


windowManagerName () {
    window=$(xprop -root -notype)
    identifier=$(echo "${window}" | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}')
    attributes=$(xprop -id "${identifier}" -notype -f _NET_WM_NAME 8t)

    echo "${attributes}" |
        grep "_NET_WM_NAME = " |
        cut --delimiter=' ' --fields=3 |
        cut --delimiter='"' --fields=2
}


windowManagerName

または1行で:

id = $(xprop -root -notype | awk '$ 1 == "_ NET_SUPPORTING_WM_CHECK:" {print $ 5}'); xprop -id "$ {id}" -notype -f _NET_WM_NAME 8t | grep "_NET_WM_NAME =" | cut --delimiter = '' --fields = 3 | cut --delimiter = '"' --fields = 2


0

これは、dbusとAccountsサービス(Ubuntuではデフォルトで両方)で可能です。

$ qdbus --system org.freedesktop.Accounts \                                                                
> /org/freedesktop/Accounts/User1000 \                                                                                     
> org.freedesktop.Accounts.User.XSession                                                                                   
ubuntu

lightdm(つまり、グラフィカルログイン画面)を介してログインしてこれをテストしたことに注目してください。blackboxのような古典的なデスクトップを検出し、明らかにUnityを検出します。これは、ユーザーがセッションとしてログイン画面で選択する値の値であると思われます。そのため、プロセスのチェックを使用する方が少し簡単です


0

脚本

次のスクリプトは、私がunix.seに投稿した同様の質問に対する最良の回答として作成されました。また、UnityおよびLXDEでもうまく機能します。

if [ "$XDG_CURRENT_DESKTOP" = '' ]
then
  desktop=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
else
  desktop=$XDG_CURRENT_DESKTOP
fi

desktop=${desktop,,}  # convert to lower case
echo "$desktop"

0

というツールを使用できますinxi。Ubuntuリポジトリから次の方法で入手できます。

sudo apt install inxi

またはgithubから:https : //github.com/smxi/inxi

次のようにコマンドを実行するだけです:

inxi -Sx
System:    Host: blackhole Kernel: 5.1.15-050115-lowlatency x86_64 bits: 64 compiler: gcc v: 8.3.0
           Desktop: i3 4.16.1-178-g31c0f1b8 Distro: Ubuntu 19.04 (Disco Dingo)

Desktop: i3部品に注意してください。私の場合、私が使用するウィンドウマネージャはi3です。

オプション-Sはシステム情報を表示しx、ウィンドウマネージャーに関する情報を追加します。


-3

実行中のプロセスで既知のウィンドウマネージャーをチェックすることしか考えられません。以前は、優先ウィンドウマネージャに設定されたキーがgconfにありましたが、Gnome 2.12から非推奨になりました。

したがって、これがプログラミング目的の場合は、すべてのLinuxウィンドウマネージャーについて調査することをお勧めします。いくつかの人気があります:

  • gnome-shell *
  • コンピズ
  • メタシティ
  • つぶやき
  • ノコギリ

コマンドpgrep -l $WINDOW_MANAGERでそれぞれのチェックを実行する必要$WINDOW_MANAGERがあります。ここで、チェックするウィンドウマネージャーの名前です。このpgrepコマンドは、実行中のプロセスをチェックします。

Gnome Shellがウィンドウマネージャーと見なされるかどうか、100%は確信できません。/usr/bin/gnome-wmスクリプトのリストから取得した残りのウィンドウマネージャー。実際、このスクリプトは(クリーンインストールに存在するため)使用可能でなければなりませんが、私の場合compizは(Gnomeセッションではなく)デフォルトのウィンドウマネージャーではないものを実行しようとします。

編集:

さて、@ Anarciのコメントはより正確なようです。私の場合、それは表示されましたgnome-shell


1
pgrepは正規表現をサポートしているため、代替パターンを使用できます。pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
匿名

1
それだけでは不十分です。ユーザーが異なるマネージャーで複数のXセッションを実行している場合はどうでしょうか。少なくとも、関心のあるディスプレイ上でウィンドウマネージャーが動作していることを確認する必要があります($DISPLAYその環境で調べることで確認できます)。
ジル

Ubuntu 18.04 LTSデスクトップ:Unity:Unity7:ubuntuセッション:unity
user2584621
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.