Câu hỏi Cách xác định trình quản lý cửa sổ nào đang chạy


Có cách nào (chẳng hạn như lệnh hoặc biến môi trường) để xác định quản lý cửa sổ là người đang hoạt động tích cực trong phiên hiện tại?


151
2017-10-26 20:39


gốc




Các câu trả lời:


Nếu bạn có wmctrl cài đặt, dòng đầu tiên của đầu ra từ lệnh

    wmctrl -m

sẽ hiển thị cho bạn tên của trình quản lý cửa sổ. Nếu bạn không có wmctrl đã cài đặt, sử dụng lệnh sau để cài đặt nó:

    sudo apt-get install wmctrl

Chú thích, man wmctrl (có nghĩa là, man trang 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-generic # 23-Ubuntu x86_64 / metacity 2.34.1, dòng đầu tiên của wmctrl -m là: Name: Metacity
trong khi echo $DESKTOP_SESSION cho thấy ubuntu-2d và echo $XDG_CURRENT_DESKTOP cho thấy Unity.

Trên một bản cài đặt Ubuntu 15.10 mới của Ubuntu desktop phần mềm trên một máy tính xách tay cũ, dòng đầu tiên của đầu ra từ wmctrl -m là: Name: Compiz
trong khi DESKTOP_SESSION và XDG_CURRENT_DESKTOP giá trị cũ là ubuntu và Unity


126
2018-01-05 07:57



Thật không may điều này không làm việc trên ssh ngay cả khi X11 được kích hoạt. - Sridhar-Sarnobat
@ Sridhar-Sarnobat trên ubuntu 15.04, đang chạy ssh -Y {host} 'wmctrl -m' 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à ssh sẽ có thông tin giới hạn về trình quản lý cửa sổ. - michael
trên quế chạy debian, điều này không hoạt động. đầu ra của wmctrl -m là Tên: Mutter (Muffin) trong khi $ XDG_CURRENT_DESKTOP = X-Cinnamon - Floyd
Trên Xubuntu Wily, chạy Window Maker 0.95.6 - wmctrl báo cáo N / A cho tất cả các mục nhập. GDMSESSION được đặt thành wmaker-common nhưng XDG_CURRENT_DESKTOP không được đặt ở tất cả. - Mei
@Mei, bạn có Window Maker đang chạy trên bất kỳ hệ thống nào khác mà bạn có thể so sánh không? Ngoài ra, hãy làm một trong hai wmctrl -d (Liệt kê tất cả các màn hình được quản lý bởi trình quản lý cửa sổ) hoặc wmctrl -l (Danh sách các cửa sổ được quản lý bởi trình quản lý cửa sổ) làm việc ok trên Xubuntu Wily với Window Maker? - James Waldby - jwpat7


Trên các hệ thống Linux, tôi đã thử nghiệm các biến môi trường XDG_CURRENT_DESKTOP và GDMSESSION và 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"

Ubuntu 18.04 (Ubuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 18.04 (Ubuntu trên Wayland)

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

Ubuntu 16.04


Thống nhất (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Đoàn kết chạy với Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Lưu ý MIR_SERVER_NAME cũng được đặt

  • MIR_SERVER_NAME=session-$NUMBER

Đoàn kết chạy không có Mir

  • 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

Gnome

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

Gnome Classic

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic (không có hiệu ứng)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

Các bản phân phối dựa trên Ubuntu khác


Mint 13 (Quế)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

Mint 16 (phiên bản KDE)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

Mint 17 (Quế)

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=default

Lubuntu 12.04

  • XDG_CURRENT_DESKTOP=LXDE 
  • GDMSESSION=Lubuntu

Wasta 14.04

  • XDG_CURRENT_DESKTOP=X-Cinnamon 
  • GDMSESSION=cinnamon

Wasta 14.04 sử dụng máy tính để bàn Gnome.

  • 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

84
2017-12-10 20:38



Mint 13 (Quế): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = quế - rik-shaw
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu - rik-shaw
Điều gì về $ DESKTOP_SESSION? Như một giải pháp sao lưu :) - Savvas Radevic
Nếu tôi không sử dụng GDM thì sao? - Robert Siemer
Và hơn nữa nó không trả lời những gì quản lý cửa sổ Tôi sử dụng! - Robert Siemer


Trong 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ố đó là:

XDG_CURRENT_DESKTOP - Cho bạn biết môi trường máy tính để bàn bạn đang sử dụng

GDMSESSION - Cho bạn biết bạn chọn tùy chọn nào từ người chào lightdm để đăng nhập.

Để sử dụng chúng, hãy vào terminal 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ụ 'ubuntu' nếu bạn chọn ubuntu trong thông tin đăng nhập hoặc 'ubuntu-2d' nếu bạn đã chọn tên đăng nhập đó trong thông tin đăng nhập.)

Bạn có người khác nếu bạn nhìn kỹ hơn ở đầu ra của env như DESKTOP_SESSION và COMPIZ_CONFIG_PROFILE

Vì những gì bạn đang tìm kiếm là tên của những gì Window Manager đang được 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. Để thực hiện điều này, có một lệnh gọi là pgrep ( Wikipedia ). Tôi đã làm như sau để lấy tên vì tham số -l thêm ID tiến trình:

pgrep -l compiz |cut -d " " -f2 vì quá trình đang chạy bởi cùng một người dùng nên không cần tiền tố phần sudo. Sau đó, bạn có thể sử dụng điều này để tạo tập lệnh thực hiện 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 từ compiz khác như mutter, kwin, v.v.


40
2017-10-26 21:57



Những người chỉ cho tôi biết tên phiên và môi trường máy tính để bàn. Ví dụ: "GNOME" là môi trường máy tính để bàn có thể sử dụng Metacity, Mutter, Compiz hoặc các trình quản lý cửa sổ khác. Nó nói "gnome-classic" là tên phiên, không có trình quản lý cửa sổ nào có tên đó. - Anonymous
Có bạn đi. Tìm thấy một lệnh có thể trợ giúp với danh sách quy trình. pgrep. Đã đến phần đó, ít nhất nó cho bạn thấy tên của người quản lý cửa sổ nếu tìm thấy. Đang cố gắng kiểm tra xem tôi có thể thêm tất cả chúng cùng nhau ở đó không. Câu hỏi của bạn là rất tốt vì Ubuntu 11.10 gây nhầm lẫn một chút bằng cách sử dụng Compiz (Hoặc lẩm bẩm nếu khi Gnome 3.x) như vậy sẽ là tốt đẹp để chỉ ra trình quản lý cửa sổ thực tế được sử dụng trong Unity. - Luis Alvarado♦
$XDG_CURRENT_DESKTOP là môi trường máy tính để bàn hiện tại, KHÔNG phải trình quản lý cửa sổ. - Ken Sharp


tôi đã tìm thấy pstree là một trợ giúp lớn.

Cài đặt

sudo apt-get install pstree

đầu ra

Đâ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}]

20
2018-04-22 04:59





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

8
2018-05-15 06:19



Bạn có thể giải thích cách hoạt động của nó không? Ngoài ra, tôi nghĩ bạn đang thiếu một ) cuối cùng. - Louis Matthijssen
@LouisMatthijssen 1. xprop -root -notype hiể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 sẽ được gửi đến awk qua đường ống; 2. awk chỉ 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 nó đi qua đường ống với một chuỗi đã cho và nếu nó tìm thấy nó khớp với mã trong dấu ngoặc đơn in cột thứ năm từ hàng này - chỉ như vậy xảy ra (hoàn toàn do tai nạn, 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 một lần nữa để có được các thuộc tính của Windows Manager với xprop -id - cprn


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 là bình thường trong "Hệ điều hành"> "Môi trường màn hình", 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ân phối thử nghiệm, ngoại trừ một bản 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". Các mục xuất hiện trong nhiều dòng nên là câu trả lời (nếu có một mục vẽ với "phiên" nên là giải pháp).


3
2018-04-15 22:51



XFCE cũng có một số gnome-... quy trình (và một kde hit với kdevtmpfs) - Xen2050


Không có gì ở trên thực sự làm việc cho 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.

Đâ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 tôi)

ls /usr/bin/*session

(khởi chạy môi trường máy tính để bàn phiên / máy tính để bàn hiện đang được sử dụng)

gnome-shell --version 

(để tìm phiên bản gnome nào được cài đặt)


1
2017-07-07 16:26





Kịch bản sau đây dẫn đến câu trả lời hay nhất cho một câu hỏi tôi đăng trên unix.se. Nó cũng hoạt động tốt 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"

-1
2018-02-24 17:42





Đâ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ú ý rằng tôi đã thử nghiệm điều này với đă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ư blackbox, và rõ ràng là phát hiện 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 như phiên, đó là lý do tại sao nó dễ dàng hơn một chút để sử dụng kiểm tra các quy trình


-1
2018-04-03 07:54