回答:
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-2d
とecho $XDG_CURRENT_DESKTOP
示しましたUnity
。
新鮮なUbuntuの15.10でのインストールUbuntu desktop
から、古いノートパソコン上のソフトウェアの出力の最初の行をwmctrl -m
した:Name: Compiz
ながらDESKTOP_SESSION
とXDG_CURRENT_DESKTOP
値であったubuntu
とUnity
ssh -Y {host} 'wmctrl -m'
いくつかの値(たとえば、「名前:Compiz」、およびいくつかのN / A)が返されますがssh
、ウィンドウマネージャーに関する情報が限られているのは理にかなっています。
wmctrl -d
ウィンドウマネージャーによって管理されているすべてのデスクトップを一覧表示する)またはwmctrl -l
(ウィンドウマネージャーによって管理されているウィンドウを 一覧表示する)が正常に動作しますか?
Linuxシステムでは、私は、環境変数をテストXDG_CURRENT_DESKTOP
してGDMSESSION
、以下の結果を得ました。
次の行を使用して出力を取得できます。
printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu-wayland
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
注MIR_SERVER_NAMEも設定されています
MIR_SERVER_NAME=session-$NUMBER
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xfce
XDG_CURRENT_DESKTOP=
GDMSESSION=kde-plasma
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu-2d
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-shell
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-classic
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-fallback
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=KDE
GDMSESSION=default
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=default
XDG_CURRENT_DESKTOP=LXDE
GDMSESSION=Lubuntu
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome
XDG_CURRENT_DESKTOP=MATE
GDMSESSION=mate
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xubuntu
端末タイプでenv
、すべての環境変数を表示します。それらのいくつかは次のとおりです。
XDG_CURRENT_DESKTOP-使用しているデスクトップ環境を示します
GDMSESSION -lightdm greeterからログインするために選択したオプションを示します。
それらを使用するには、ターミナルに移動して次を入力します。
echo $XDG_CURRENT_DESKTOP
(Unityを使用している場合、たとえば 'unity'の出力)
または
echo $GDMSESSION
(たとえば、ログインでubuntuを選択した場合は「ubuntu」、ログインでubuntuを選択した場合は「ubuntu-2d」が出力されます。)
DESKTOP_SESSIONやCOMPIZ_CONFIG_PROFILEenv
などの出力を詳しく見ると、他の人がいます。
探しているのはWindow Managerが使用しているものの名前なので、これを取得する唯一の方法はプロセスリストを調べることです。これを行うには、pgrep
(Wikipedia)というコマンドがあります。パラメーター-lがプロセスIDを追加するため、名前を取得するために次のことを行いました。
pgrep -l compiz |cut -d " " -f2
プロセスは同じユーザーによって実行されているため、sudo部分にプレフィックスを付ける必要はありません。次に、これを使用して、ウィンドウマネージャーに基づいてアクションを実行するスクリプトを作成できます。
言葉だけを変更、他のタイプを探しするにはcompiz
別のようにmutter
、kwin
など。
$XDG_CURRENT_DESKTOP
ウィンドウマネージャではなく、現在のデスクトップ環境です。
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}]
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
)
最後に行方不明になっていると思います。
xprop -root -notype
ルートウィンドウのすべてのプロパティを表示し(解析を容易にするために型を省略します)、出力はawk
パイプ経由で送信されます。2. awk
命令$1=="_NET[blah]CK:"{print $5}'
は、パイプを介して取得した入力の各行の最初の列を特定の文字列と比較し、一致する場合は、この行から5番目の列を印刷する括弧内のコードを実行します-偶然(完全に、 「_NET_SUPPORTING_WM_CHECK」アトムのIDになります。3.このIDは、Windowsマネージャーのプロパティを取得するために再び使用されますxprop -id
私もKDEでテストしてきましたが、結論は次のとおりです。
a)HardInfoを使用したグラフィカルな方法:答えは通常、「オペレーティングシステム」>「デスクトップ環境」にありますが、そうでない場合は「環境変数」を確認できます。HardInfoには、KDEを除くすべてのテスト済みディストリビューションが用意されていますが、簡単かつ迅速にインストールできます(Linux Mint 13では2パッケージのみ)。
b)は、このコマンドを使用して、コマンドライン、: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm"
。より多くの行に表示されるアイテムが答えになるはずです(ドローがある場合は、「セッション」を含むアイテムを解決する必要があります)。
gnome-...
プロセスがあります(およびでkdeヒットkdevtmpfs
)
#! /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
これは、dbusとAccountsサービス(Ubuntuではデフォルトで両方)で可能です。
$ qdbus --system org.freedesktop.Accounts \
> /org/freedesktop/Accounts/User1000 \
> org.freedesktop.Accounts.User.XSession
ubuntu
lightdm(つまり、グラフィカルログイン画面)を介してログインしてこれをテストしたことに注目してください。blackboxのような古典的なデスクトップを検出し、明らかにUnityを検出します。これは、ユーザーがセッションとしてログイン画面で選択する値の値であると思われます。そのため、プロセスのチェックを使用する方が少し簡単です
次のスクリプトは、私が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"
というツールを使用できます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
、ウィンドウマネージャーに関する情報を追加します。
実行中のプロセスで既知のウィンドウマネージャーをチェックすることしか考えられません。以前は、優先ウィンドウマネージャに設定されたキーがgconfにありましたが、Gnome 2.12から非推奨になりました。
したがって、これがプログラミング目的の場合は、すべてのLinuxウィンドウマネージャーについて調査することをお勧めします。いくつかの人気があります:
コマンドpgrep -l $WINDOW_MANAGER
でそれぞれのチェックを実行する必要$WINDOW_MANAGER
があります。ここで、チェックするウィンドウマネージャーの名前です。このpgrep
コマンドは、実行中のプロセスをチェックします。
Gnome Shellがウィンドウマネージャーと見なされるかどうか、100%は確信できません。/usr/bin/gnome-wm
スクリプトのリストから取得した残りのウィンドウマネージャー。実際、このスクリプトは(クリーンインストールに存在するため)使用可能でなければなりませんが、私の場合compiz
は(Gnomeセッションではなく)デフォルトのウィンドウマネージャーではないものを実行しようとします。
編集:
さて、@ Anarciのコメントはより正確なようです。私の場合、それは表示されましたgnome-shell
。
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAY
その環境で調べることで確認できます)。