現在のセッションでアクティブに実行されているものがウィンドウマネージャーであるかどうかを判断する方法(コマンドや環境変数など)はありますか?
wmctrl
がインストールされている場合、コマンドからの出力の最初の行
wmctrl -m
ウィンドウマネージャの名前が表示されます。 wmctrl
がインストールされていない場合は、次のコマンドを使用してインストールします。
Sudo apt-get install wmctrl
注:man wmctrl
(つまり、man
のwmctrl
ページには、次のように記載されています:
-mウィンドウマネージャーに関する情報を表示します...
Ubuntu 11.10/Linux 3.0.0-14-generic#23-Ubuntu x86_64/metacity 2.34.1システムでは、wmctrl -m
からの出力の最初の行はName: Metacity
でした
while echo $DESKTOP_SESSION
はubuntu-2d
を示し、echo $XDG_CURRENT_DESKTOP
はUnity
を示しました。
古いラップトップにUbuntu desktop
ソフトウェアを新しくインストールしたUbuntu 15.10では、wmctrl -m
からの出力の最初の行はName: Compiz
でしたDESKTOP_SESSION
およびXDG_CURRENT_DESKTOP
の値はubuntu
およびUnity
でした
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」が出力されます。)
env
の出力を詳しく見ると、DESKTOP_SESSIONおよびCOMPIZ_CONFIG_PROFILE
探しているのはWindow Managerの使用中の名前なので、これを取得する唯一の方法はプロセスリストを調べることです。これを行うには、pgrep
( Wikipedia )というコマンドがあります。パラメーター-lがプロセスIDを追加するため、次のようにして名前を取得しました。
pgrep -l compiz |cut -d " " -f2
プロセスは同じユーザーによって実行されているため、Sudo部分にプレフィックスを付ける必要はありません。次に、これを使用して、ウィンドウマネージャーに基づいてアクションを実行するスクリプトを作成できます。
他のタイプを探すには、Word compiz
をmutter
、kwin
などの別のタイプに変更するだけです。
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
私もKDEでテストしてきましたが、結論は次のとおりです。
a)HardInfoを使用したグラフィカルな方法:答えは通常「オペレーティングシステム」>「デスクトップ環境」にありますが、そうでない場合は「環境変数」を確認できます。 HardInfoは、KDEを除くすべてのテスト済みディストリビューションで使用できますが、簡単かつ迅速にインストールできます(Linux Mint 13では2パッケージのみ)。
b)コマンドライン、このコマンド:ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm"
。より多くの行に表示されるアイテムが答えになります(ドローがある場合、「セッション」を含むアイテムを解決する必要があります)。
上記のどれも実際にはうまくいきませんでした。Gnomeを現在のデスクトップセッションとして実行していたかどうかを知りたかっただけです。
これが機能したので、ターミナルを開きます
lsb_release -a
(UBUNTUマシンにインストールしたフレーバーまたはバージョンを確認するため)
ls /usr/bin/*session
(現在使用中のデスクトップセッション/デスクトップ環境を起動します)
gnome-Shell --version
(インストールされているgnomeのバージョンを確認するため)
これは、dbusとAccountsサービス(Ubuntuではデフォルトで両方)で可能です。
$ qdbus --system org.freedesktop.Accounts \
> /org/freedesktop/Accounts/User1000 \
> org.freedesktop.Accounts.User.XSession
ubuntu
Lightdm(つまり、グラフィカルログイン画面)を介してログインしてこれをテストしたことに注目してください。blackboxのような古典的なデスクトップを検出し、明らかにUnityを検出します。これは、ユーザーがログイン画面でセッションとして選択する値の値であると思われます。そのため、プロセスのチェックを使用する方が少し簡単です
#! /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
次のスクリプトは、同様の nix.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
はウィンドウマネージャーに関する情報を追加します。