यह कैसे निर्धारित किया जाए कि कौन सी विंडो मैनेजर चल रही है


179

क्या वर्तमान सत्र में सक्रिय रूप से चलने वाले विंडो प्रबंधक को निर्धारित करने के लिए कोई तरीका (जैसे कमांड या पर्यावरण चर) है ?

जवाबों:


145

यदि आपने wmctrlस्थापित किया है, तो कमांड से आउटपुट की पहली पंक्ति

    wmctrl -m

आपको विंडो मैनेजर का नाम दिखाएगा। यदि आपने wmctrlइंस्टॉल नहीं किया है, तो इसे स्थापित करने के लिए निम्न कमांड का उपयोग करें:

    sudo apt-get install wmctrl

नोट, man wmctrl(यह है, manपृष्ठ के लिए wmctrl) भाग में कहते हैं:

-म विंडो प्रबंधक के बारे में जानकारी प्रदर्शित करें ...

मेरे उबंटू 11.10 / लिनक्स 3.0.0-14-जेनेरिक # 23-उबंटू x86_64 / मेटासिटी 2.34.1 सिस्टम पर, से आउटपुट की पहली लाइन wmctrl -mथी: Name: Metacity
जबकि 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


4
दुर्भाग्य से यह ssh पर काम नहीं करता है भले ही X11 सक्षम हो।
श्रीधर सरनोबत

1
@ श्रीधर-सरनोबत ubuntu 15.04 पर, दौड़ने से ssh -Y {host} 'wmctrl -m'कुछ मान लौट आते हैं (उदाहरण के लिए, "नाम: कॉम्पिज़" और कई एन / ए के), लेकिन यह समझ में आता है कि sshविंडो प्रबंधक के बारे में सीमित जानकारी होगी।
माइकल

दालचीनी चलाने पर, यह काम नहीं करता है। wmctrl -m का आउटपुट नाम है: Mutter (मफिन) जबकि $ XDG_CURRENT_DESKTOP = X-Cinnamon
Floyd

Xubuntu Wily पर, सभी प्रविष्टियों के लिए विंडो निर्माता 0.95.6 - wmctrl N / A चला रहा है। GDMSESSION wmaker-common पर सेट है, लेकिन XDG_CURRENT_DESKTOP बिल्कुल सेट नहीं है।
मेई

@Mei, क्या आपके पास किसी अन्य सिस्टम पर विंडो मेकर चल रहा है जिसकी आप तुलना कर सकते हैं? इसके अलावा, या तो wmctrl -d(विंडो मैनेजर द्वारा प्रबंधित सभी डेस्कटॉप की सूची दें) या wmctrl -l(विंडो मैनेजर द्वारा प्रबंधित की जा रही विंडो की सूची) विंडो मेकर के साथ जुबांटु विली पर ठीक काम करें?
जेम्स वाल्डबी - jwpat7

101

Linux सिस्टम पर मैं वातावरण चर का परीक्षण किया XDG_CURRENT_DESKTOPऔर GDMSESSIONऔर निम्न परिणाम मिला है।

आउटपुट प्राप्त करने के लिए आप इस लाइन का उपयोग कर सकते हैं:

printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"

Ubuntu 18.04 (Ubuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 18.04 (वेनलैंड पर उबंटू)

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

उबंटू 16.04


एकता (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

उबंटू 14.04


एकता मीर के साथ चल रही है

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

नोट MIR_SERVER_NAME भी सेट है

  • MIR_SERVER_NAME=session-$NUMBER

एकता मीर के बिना चल रही है

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

उबुन्टु 12.04


केडीई

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

एकता 3 डी

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

एकता 2 डी

  • 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

अन्य उबंटू आधारित वितरण


मिंट 13 (दालचीनी)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

मिंट 16 (केडीई संस्करण)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

मिंट 17 (दालचीनी)

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=default

लुबंटू 12.04

  • XDG_CURRENT_DESKTOP=LXDE
  • GDMSESSION=Lubuntu

वस्ता 14.04 / 18.04

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=cinnamon

Wasta 14.04 सूक्ति डेस्कटॉप का उपयोग करते हुए।

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome

उबंटू मेट 18.04

  • XDG_CURRENT_DESKTOP=MATE
  • GDMSESSION=mate

जुबांटु 18.04

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xubuntu

4
मिंट 13 (दालचीनी): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = दालचीनी
rik-shaw

1
लुबंटू 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = लुबंटू
rik-shaw

$ DESKTOP_SESSION के बारे में क्या? एक बैकअप समाधान के रूप में :)
Savvas Radevic

1
यदि मैं GDM का उपयोग नहीं करता हूं तो क्या होगा?
रॉबर्ट सिएमर

6
और आगे यह जवाब नहीं देता है कि मैं किस विंडो मैनेजर का उपयोग करता हूं!
रॉबर्ट सिएमर

42

envसभी पर्यावरण चर को देखने के लिए टर्मिनल प्रकार में । उनमें से कुछ हैं:

XDG_CURRENT_DESKTOP - आपको बताता है कि आप किस डेस्कटॉप वातावरण का उपयोग कर रहे हैं

GDMSESSION - आपको बताता है कि आपने लॉगिन करने के लिए लाइटएमडी अभिवादन से क्या विकल्प चुना है।

उनका उपयोग करने के लिए, टर्मिनल पर जाएं और टाइप करें:

echo $XDG_CURRENT_DESKTOP

(यदि आप एकता का उपयोग कर रहे हैं तो उदाहरण 'एकता' के लिए आउटपुट देगा)

या

echo $GDMSESSION  

(यदि आप लॉगिन में ubuntu का चयन करते हैं या यदि आपने लॉगिन में चयन किया है तो 'ubuntu' उदाहरण के लिए आउटपुट देगा। '

यदि आप envजैसे DESKTOP_SESSION और COMPIZ_CONFIG_FILE के आउटपुट को करीब से देखते हैं तो आपके पास अन्य हैं

चूँकि आप जो देख रहे हैं उसका नाम क्या है विंडो प्रबंधक उपयोग में है, केवल एक ही तरीका है कि मैं इसे कैसे प्राप्त करूं यह प्रक्रिया सूची में देख कर है। ऐसा करने के लिए एक कमांड pgrep( विकिपीडिया ) कहा जाता है । मैंने नाम प्राप्त करने के लिए निम्नलिखित किया क्योंकि पैरामीटर -l प्रक्रिया आईडी जोड़ता है:

pgrep -l compiz |cut -d " " -f2चूंकि प्रक्रिया एक ही उपयोगकर्ता द्वारा चल रही है, इसलिए सूडो भाग को उपसर्ग करने की आवश्यकता नहीं है। फिर आप इसका उपयोग एक स्क्रिप्ट बनाने के लिए कर सकते हैं जो विंडो मैनेजर पर आधारित एक एक्शन करती है।

अन्य प्रकार के लिए देखने के लिए, बस शब्द बदल compizएक और की तरह करने के लिए mutter, kwin, आदि ..


2
वे सिर्फ मुझे सत्र का नाम और डेस्कटॉप वातावरण बताते हैं। उदाहरण यह कहता है कि "गनोम" जो एक डेस्कटॉप वातावरण है जो मेटासिटी, मटेर, कॉम्पिज़ या अन्य विंडो प्रबंधकों का उपयोग कर सकता है। यह कहता है "सूक्ति-क्लासिक" जो एक सत्र का नाम है, उस नाम के साथ ऐसा कोई विंडो प्रबंधक नहीं है।
बेनामी

1
तुम वहाँ जाओ। एक कमांड मिला जो प्रक्रिया सूची के साथ मदद कर सकता है। pgrep। उस भाग के लिए मिला, कम से कम यह आपको विंडो मैनेजर का नाम दिखाता है अगर मिला। यह जाँचने की कोशिश की जा रही है कि क्या मैं उन सभी को वहाँ जोड़ सकता हूँ। उबंटू 11.10 के बाद से आपका सवाल बहुत अच्छा है क्योंकि Compiz (या जब ग्नोम 3.x) का उपयोग करके थोड़ा भ्रमित करता है, तो यूनिटी में उपयोग किए जाने वाले वास्तविक विंडो मैनेजर को इंगित करना अच्छा होगा।
लुइस अल्वाराडो

$XDG_CURRENT_DESKTOPवर्तमान डेस्कटॉप वातावरण है, विंडो मैनेजर नहीं है।
केन शार्प

24

मुझे 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}]

1
यह मुझे मेरे कस्टम बिल्डरोट सिस्टम के साथ मिला।
jc__

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

1
क्या आप बता सकते हैं कि यह कैसे काम करता है? इसके अलावा, मुझे लगता है कि आप )अंत में गायब हैं ।
लुइस माथिज्सेन

@LouisMatthijssen 1. xprop -root -notypeरूट विंडो के सभी गुण प्रदर्शित करता है (और आसान पार्सिंग के लिए प्रकार छोड़ता है), आउटपुट awkपाइप के माध्यम से भेजा जाता है ; 2. awkनिर्देश $1=="_NET[blah]CK:"{print $5}'इनपुट की प्रत्येक पंक्ति के पहले कॉलम की तुलना पाइप के माध्यम से दी गई स्ट्रिंग के साथ करता है और यदि यह मैच पाता है तो यह कोष्ठक में कोड चलाता है जो इस पंक्ति से पांचवें कॉलम को प्रिंट करता है - बस ऐसा होता है (पूरी तरह से दुर्घटना से,) मैं शर्त लगाता हूं कि "_NET_SUPPORTING_WM_CHECK" परमाणु की आईडी हो; 3. इस आईडी का उपयोग फिर से विंडोज मैनेजर की संपत्तियों को प्राप्त करने के लिए किया जाता हैxprop -id
cprn

4

मैंने केडीई के साथ भी परीक्षण किया है और मेरा निष्कर्ष है:

क) आलेखीय तरीका, हार्डइन्फो के साथ: उत्तर आम तौर पर "ऑपरेटिंग सिस्टम"> "डेस्कटॉप एनवायरनमेंट" में है, लेकिन यदि आप "एनवायर्नमेंटल वैरिएबल" को नहीं देख सकते हैं। हार्डइन्फो सभी परीक्षण किए गए डिस्ट्रो के साथ तैयार है, केडीई के साथ एक को छोड़कर, लेकिन इसे आसानी से और जल्दी से स्थापित किया जा सकता है (लिनक्स मिंट 13 में केवल 2 पैकेज)।

बी) कमांड लाइन, इस कमांड के साथ ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm":। अधिक पंक्तियों में दिखाई देने वाली वस्तु का उत्तर होना चाहिए (यदि "सत्र" के साथ एक ड्रॉ होना चाहिए तो समाधान होना चाहिए)।


एक्सएफसीई में कई gnome-...प्रक्रियाएं भी हैं (और केडी हिट के साथ kdevtmpfs)
एक्सपी 2050

2

उपरोक्त में से कोई भी वास्तव में मेरे लिए काम नहीं करता था, मैं सिर्फ यह जानना चाहता था कि क्या मैं अपने वर्तमान डेस्कटॉप सत्र के रूप में गनोम चल रहा था।

यह वही है जो काम करता है, एक टर्मिनल खोलें

lsb_release -a

(यह जांचने के लिए कि मैंने अपने UBUNTU मशीन पर कौन सा स्वाद या संस्करण स्थापित किया है)

ls /usr/bin/*session

(जो डेस्कटॉप सत्र / डेस्कटॉप वातावरण वर्तमान में उपयोग में है)

gnome-shell --version 

(सूक्ति का कौन सा संस्करण स्थापित है यह जानने के लिए)


1
#! /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

या एक पंक्ति में:

id = $ (xprop -root -notype। awk '$ 1 == "_ NET_SUPPORTING_WM_CHECK:" {प्रिंट $ 5}'); xprop -id "$ {id}" -notype -f _NET_WM_NAME 8t | grep "_NET_WM_NAME =" | cut --delimiter = '' --fields = 3 | cut - डेलिमिटर = '' '- फील्ड्स = 2


0

यह dbus और लेखा सेवा (उबंटू में डिफ़ॉल्ट रूप से दोनों) के साथ संभव है।

$ qdbus --system org.freedesktop.Accounts \                                                                
> /org/freedesktop/Accounts/User1000 \                                                                                     
> org.freedesktop.Accounts.User.XSession                                                                                   
ubuntu

वर्थ नोटिंग कि मैंने इसे lightdm के माध्यम से लॉगिंग के साथ परीक्षण किया है (यह आलेखीय लॉगिन स्क्रीन है), इसने ब्लैकबॉक्स जैसे क्लासिक डेस्कटॉप का पता लगाया और जाहिर तौर पर एकता का पता लगाया। मुझे संदेह है कि यह मान है कि उपयोगकर्ता सत्र के रूप में लॉगिन स्क्रीन पर क्या चुनता है, इसीलिए प्रक्रियाओं के लिए उस जाँच का उपयोग करना थोड़ा आसान है


0

लिपि

निम्नलिखित स्क्रिप्ट के परिणामस्वरूप एक समान प्रश्न का सबसे अच्छा उत्तर मिला , जिसे मैंने unix.se पर पोस्ट किया था । यह यूनिटी और 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"

0

आप नामक टूल का उपयोग कर सकते हैं inxi। इसे उबंटू रिपोजिटरी से प्राप्त किया जा सकता है:

sudo apt install inxi

या गितुब से: 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विंडो प्रबंधक के बारे में जानकारी जोड़ता है।


-3

मैं केवल चल रही प्रक्रियाओं में ज्ञात विंडो प्रबंधकों के लिए जाँच करने के बारे में सोच सकता हूँ। Gconf में एक कुंजी हुआ करती थी जिसे पसंदीदा विंडो मैनेजर में सेट किया गया था, लेकिन Gnome 2.12 के बाद से इसका अपचयन हुआ।

इसलिए, यदि यह एक प्रोग्रामिंग उद्देश्य के लिए है, तो मैं आपको सभी लिनक्स विंडो प्रबंधकों के लिए शोध करने का सुझाव देता हूं; कुछ लोकप्रिय हैं:

  • सूक्ति-खोल *
  • Compiz
  • मेटासिटी
  • धीरे से कहना
  • Sawfish

आपको कमांड के साथ प्रत्येक के लिए एक चेक चलाना होगा pgrep -l $WINDOW_MANAGER, जहां $WINDOW_MANAGERआप जिस विंडो मैनेजर की जांच करना चाहते हैं उसका नाम है। pgrepचल रही प्रक्रियाओं के लिए आदेश जाँच करता है।

यदि गनोम शेल को विंडो मैनेजर माना जाता है, तो मुझे 100% यकीन नहीं है; बाकी विंडो मैनेजर मुझे /usr/bin/gnome-wmस्क्रिप्ट की एक सूची से मिले । यह स्क्रिप्ट वास्तव में प्रयोग करने योग्य होनी चाहिए (क्योंकि यह एक क्लीन इंस्टाल पर मौजूद है) लेकिन मेरे मामले में यह चलाने की कोशिश करता है compizजो कि मेरा डिफ़ॉल्ट विंडो मैनेजर नहीं है (मेरे गनोम सत्र में नहीं)।

संपादित करें:

वैसे @Anarci की टिप्पणी अधिक सटीक प्रतीत होती है। मेरे मामले में यह दिखा gnome-shell


1
लगता है कि pgrep रेगेक्स का समर्थन करता है इसलिए प्रत्यायन के साथ एक पैटर्न का उपयोग किया जा सकता है। pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
बेनामी

1
यह पर्याप्त नहीं है: क्या होगा यदि उपयोगकर्ता विभिन्न प्रबंधकों के साथ कई एक्स सत्र चला रहा है? आपको कम से कम यह देखना चाहिए कि जिस विंडो में आप रुचि रखते हैं, उस पर विंडो मैनर का संचालन (आप $DISPLAYइसके वातावरण में जांच करके कर सकते हैं )।
जिल्स

उबंटू 18.04 एलटीएस डेस्कटॉप: एकता: यूनिटी 7: ubuntu सत्र: एकता
user2584621
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.