回答:
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:GNOMEGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntu-waylandXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu注MIR_SERVER_NAMEも設定されています
MIR_SERVER_NAME=session-$NUMBERXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=XFCEGDMSESSION=xfceXDG_CURRENT_DESKTOP=GDMSESSION=kde-plasmaXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu-2dXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-shellXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-classicXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-fallbackXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=cinnamonXDG_CURRENT_DESKTOP=KDEGDMSESSION=defaultXDG_CURRENT_DESKTOP=X-CinnamonGDMSESSION=defaultXDG_CURRENT_DESKTOP=LXDE GDMSESSION=LubuntuXDG_CURRENT_DESKTOP=X-Cinnamon GDMSESSION=cinnamonXDG_CURRENT_DESKTOP=GNOME GDMSESSION=gnomeXDG_CURRENT_DESKTOP=MATEGDMSESSION=mateXDG_CURRENT_DESKTOP=XFCEGDMSESSION=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その環境で調べることで確認できます)。