Câu trả lời:
Nếu bạn đã wmctrlcài đặt, dòng đầu ra đầu tiên từ lệnh
    wmctrl -m
sẽ cho bạn thấy tên của người quản lý cửa sổ. Nếu bạn chưa wmctrlcài đặt, hãy sử dụng lệnh sau để cài đặt nó:
    sudo apt-get install wmctrl
Lưu ý, man wmctrl(có nghĩa là, mantrang cho wmctrl) nói một phần:
-m Hiển thị thông tin về trình quản lý cửa sổ ...
Trên hệ thống Ubuntu 11.10 / Linux 3.0.0-14-chung # 23-Ubuntu x86_64 / metacity 2.34.1 của tôi, dòng đầu ra đầu tiên từ wmctrl -mlà:   Name: Metacity
trong khi echo $DESKTOP_SESSIONhiển thị ubuntu-2dvà echo $XDG_CURRENT_DESKTOPhiển thị Unity.
Trên bản cài đặt Ubuntu desktopphần mềm Ubuntu 15.10 mới trên máy tính xách tay cũ, dòng đầu ra đầu tiên wmctrl -mlà: Name: Compiz
trong khi DESKTOP_SESSIONvà XDG_CURRENT_DESKTOPcác giá trị là ubuntuvàUnity
ssh -Y {host} 'wmctrl -m'sẽ trả về một số giá trị (ví dụ: "Tên: Compiz" và một số N / A), nhưng điều đó có nghĩa là sshsẽ có thông tin hạn chế về trình quản lý cửa sổ.
                    wmctrl -d(Liệt kê tất cả các máy tính để bàn được quản lý bởi trình quản lý cửa sổ) hoặc   wmctrl -l(Liệt kê các cửa sổ đang được quản lý cửa sổ quản lý) hoạt động tốt trên Xubfox Wily với Window Maker?
                    Trên các hệ thống Linux Tôi đã thử nghiệm biến môi trường XDG_CURRENT_DESKTOPvà GDMSESSIONvà nhận được kết quả như sau.
Bạn có thể sử dụng dòng này để có được đầu ra:
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=ubuntuLưu ý MIR_SERVER_NAME cũng được đặt
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=xubuntuTrong các loại thiết bị đầu cuối envđể xem tất cả các biến môi trường. Một số trong số họ là:
XDG_CURRENT_DESKTOP - Cho bạn biết bạn đang sử dụng môi trường máy tính để bàn nào
GDMSESSION - Cho bạn biết tùy chọn nào bạn đã chọn từ trình chào mừng lightdm để đăng nhập.
Để sử dụng chúng, hãy đi đến thiết bị đầu cuối và gõ:
echo $XDG_CURRENT_DESKTOP
(Sẽ xuất ra ví dụ 'unity' nếu bạn đang sử dụng Unity)
hoặc là
echo $GDMSESSION  
(Sẽ xuất ra ví dụ 'ubfox' nếu bạn đã chọn ubfox trong thông tin đăng nhập hoặc 'ubfox-2d' nếu bạn chọn mục đó trong thông tin đăng nhập.)
Bạn có những người khác nếu bạn nhìn kỹ hơn vào đầu ra envnhư DESKTOP_SESSION và COMPIZ_CONFIG_PROFILE
Vì những gì bạn đang tìm kiếm là tên của Window Manager đang sử dụng, cách duy nhất tôi thấy làm thế nào để có được điều này là bằng cách tìm trong danh sách quy trình. Để làm điều này, có một lệnh gọi là pgrep( Wikipedia ). Tôi đã làm như sau để có được tên vì tham số -l thêm ID tiến trình:
pgrep -l compiz |cut -d " " -f2do quá trình đang được chạy bởi cùng một người dùng nên không cần phải thêm tiền tố vào phần sudo. Sau đó, bạn có thể sử dụng điều này để tạo một tập lệnh thực hiện một hành động dựa trên Trình quản lý cửa sổ.
Để tìm kiếm các loại khác, chỉ cần thay đổi chữ compizkhác như mutter, kwin, vv ..
$XDG_CURRENT_DESKTOPlà môi trường máy tính để bàn hiện tại, KHÔNG phải là trình quản lý cửa sổ.
                    Tôi tìm thấy pstreemột sự giúp đỡ lớn.
sudo apt-get install pstree
Đây là những gì tôi nhận được.
 ├─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 
)cuối cùng.
                    xprop -root -notypehiển thị tất cả các thuộc tính của cửa sổ gốc (và bỏ qua các loại để phân tích cú pháp dễ dàng hơn), đầu ra được gửi đến awkqua đường ống; 2. awkhướng dẫn $1=="_NET[blah]CK:"{print $5}'so sánh cột đầu tiên của mỗi hàng của đầu vào mà nó đã đi qua ống với một chuỗi đã cho và nếu tìm thấy kết quả khớp, nó sẽ chạy mã trong ngoặc in cột thứ năm từ hàng này - hoàn toàn ngẫu nhiên (hoàn toàn tình cờ, Tôi đặt cược) là ID của nguyên tử "_NET_SUPPORTING_WM_CHECK"; 3. ID này sau đó được sử dụng lại để lấy các thuộc tính của Trình quản lý Windows vớixprop -id
                    Tôi cũng đã thử nghiệm với KDE và kết luận của tôi là:
a) Cách đồ họa, với HardInfo: câu trả lời thường có trong "Hệ điều hành"> "Môi trường máy tính để bàn", nhưng nếu không, bạn có thể tìm đến "Biến môi trường". HardInfo đã sẵn sàng với tất cả các bản phát hành được thử nghiệm, ngoại trừ bản phân phối có KDE, nhưng nó có thể được cài đặt dễ dàng và nhanh chóng (chỉ có 2 gói trong Linux Mint 13).
b) Dòng lệnh, với lệnh này : ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". Mục xuất hiện trong nhiều dòng hơn sẽ là câu trả lời (nếu có một mục rút ra với "phiên" sẽ là giải pháp).
gnome-...quy trình (và một kde hit với kdevtmpfs)
                    Không có cái nào ở trên thực sự hiệu quả với tôi, tôi chỉ muốn biết liệu tôi có Gnome chạy như phiên máy tính để bàn hiện tại của tôi không.
Đây là những gì đã làm việc, mở một thiết bị đầu cuối
lsb_release -a
(để kiểm tra hương vị hoặc phiên bản nào tôi đã cài đặt trên máy UBUNTU của mình)
ls /usr/bin/*session
(khởi chạy phiên môi trường máy tính để bàn / môi trường máy tính để bàn hiện đang sử dụng)
gnome-shell --version 
(để tìm ra phiên bản gnome nào được cài đặt)
#! /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
Hoặc trong một dòng:
id = $ (xprop -root -notype | awk '$ 1 == "_ NET_SUPPORTING_WM_CHECK:" {in $ 5}'); xprop -id "$ {id}" -notype -f _NET_WM_NAME 8t | grep "_NET_WM_NAME =" | cắt --d006iter = '' --fields = 3 | cắt --d006iter = '"' --fields = 2
Đây là loại có thể với dbus và Dịch vụ tài khoản (cả hai theo mặc định trong Ubuntu).
$ qdbus --system org.freedesktop.Accounts \                                                                
> /org/freedesktop/Accounts/User1000 \                                                                                     
> org.freedesktop.Accounts.User.XSession                                                                                   
ubuntu
Đáng chú ý là tôi đã thử nghiệm điều này bằng cách đăng nhập thông qua lightdm (đó là màn hình đăng nhập đồ họa), nó đã phát hiện một máy tính để bàn cổ điển như hộp đen và rõ ràng phát hiện ra Unity. Tôi nghi ngờ đây là giá trị của những gì người dùng chọn trên màn hình đăng nhập dưới dạng phiên, đó là lý do tại sao việc sử dụng kiểm tra các quy trình dễ dàng hơn một chút
Các kịch bản sau đây kết quả là câu trả lời tốt nhất cho một tương tự câu hỏi tôi gửi qua tại unix.se . Nó cũng hoạt động tuyệt vời với Unity và 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"
Bạn có thể sử dụng công cụ được gọi là inxi. Nó có thể được lấy từ kho Ubuntu bằng cách:
sudo apt install inxi
hoặc từ github: https://github.com/smxi/inxi
Chỉ cần chạy lệnh như sau:
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)
Lưu ý Desktop: i3một phần. Trong trường hợp của tôi, trình quản lý cửa sổ tôi sử dụng là i3.
Tùy chọn -Shiển thị thông tin hệ thống và xthêm thông tin về trình quản lý cửa sổ.
Tôi chỉ có thể nghĩ đến việc kiểm tra các trình quản lý cửa sổ đã biết trong các quy trình đang chạy. Đã từng có một khóa trong gconf được đặt thành trình quản lý cửa sổ ưa thích, nhưng nó không dùng nữa kể từ Gnome 2.12.
Vì vậy, nếu điều này là cho mục đích lập trình, tôi khuyên bạn nên nghiên cứu cho tất cả các trình quản lý cửa sổ linux; Một số phổ biến là:
Bạn sẽ phải chạy một kiểm tra cho từng lệnh pgrep -l $WINDOW_MANAGER, đây $WINDOW_MANAGERlà tên của trình quản lý cửa sổ mà bạn muốn kiểm tra. Các pgrepkiểm tra lệnh cho tiến trình đang chạy.
Tôi không chắc chắn 100% nếu Gnome Shell được coi là người quản lý cửa sổ; phần còn lại của các trình quản lý cửa sổ tôi nhận được từ một danh sách trong /usr/bin/gnome-wmtập lệnh. Tập lệnh này trong thực tế nên có thể sử dụng được (vì nó có trong bản cài đặt sạch) nhưng trong trường hợp của tôi, nó cố gắng chạy compizmà không phải là trình quản lý cửa sổ mặc định của tôi (không phải trong phiên Gnome của tôi).
BIÊN TẬP:
Vâng, nhận xét của @Anarci dường như chính xác hơn. Trong trường hợp của tôi, nó đã hiển thị gnome-shell.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
                    $DISPLAYtrong môi trường của nó).