सी

2010-08-16 15 views
9

में प्रोग्रामर रूप से लिनक्स में डेस्कटॉप वातावरण का पता लगाएं मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं एक जीनोम या केडीई डेस्कटॉप वातावरण पर चल रहा हूं या नहीं।सी

मुझे पता है कि मैं एक ps -aux के माध्यम से जांच सकता हूं और gnome या केडीई को grepping कर सकता हूं लेकिन यह अच्छा नहीं है: 1) क्या होगा अगर मैं एक gnome डेस्कटॉप पर हूँ लेकिन मेरे पास केडीई libs लोड है? 2) मुझे इसे सिस्टम() या popen() या अन्य कांटा/निष्पादन संयोजन के बिना कोड से करने की ज़रूरत है।

मैं फ़ाइलों, या env पढ़ सकते हैं। चर या जो भी हो।

कोई विचार?

धन्यवाद, किसी भी मदद की सराहना की जाती है। मेटासिटी, xfwm4, flwm, आदि आप के अपने ग्रेप में उन लोगों के लिए देख सकते हैं:

+6

क्या यह xfce है? आयन? wmii? DWM ....? – cthom06

+0

चूंकि आप केवल gnome बनाम केडीई का पता लगाने की कोशिश कर रहे हैं, क्या आप डिस्ट्रोज़ या कॉन्फ़िगरेशन का एक विशेष सेट लक्षित कर रहे हैं? समाधान कितना सामान्य होना चाहिए? – nmichaels

+0

आप ऐसा क्यों करना चाहते हैं? यह संभव है कि आप यहां एक बीमार विचार से नीचे जा रहे हैं ... – dmckee

उत्तर

1

खिड़की प्रबंधकों का एक सेट आप ध्यान उठाओ हैं ps (या/proc के माध्यम से खोजें)। जीनोम पुस्तकालयों का अर्थ यह नहीं है कि कोई व्यक्ति पूरे gnome डेस्कटॉप वातावरण चला रहा है, लेकिन फिर जीनोम और केडीई विंडो प्रबंधक नहीं हैं। यदि डब्ल्यूएम की आप परवाह है, तो उनको देखें।

+0

शायद मैंने खुद को सही तरीके से समझाया नहीं है: क्या यह जानने का कोई तरीका है कि मैं एक gnome पर्यावरण या केडीई पर चल रहा हूं या नहीं? – Jessica

+0

आह। उस स्थिति में आप "विंडो प्रबंधक" के बजाय "डेस्कटॉप वातावरण" कहने के लिए अपना प्रश्न संपादित करना चाह सकते हैं। – nmichaels

+0

किया गया। क्या आपके पास अभी जवाब है? – Jessica

1

कम से कम OpenSUSE पर वहाँ वातावरण चर WINDOWMANAGER, WINDOW_MANAGER

[email protected]:~> echo $WINDOWMANAGER 
/usr/bin/startkde 
[email protected]:~> echo $WINDOW_MANAGER 
/usr/bin/startkde 
[email protected]:~> 
+0

मुझे यकीन नहीं है, लेकिन मुझे लगता है कि यह gentoo पर भी काम करता है, –

+0

और यह उबंटू पर नहीं है। – Job

+1

हां, धन्यवाद, लेकिन यह उबंटू, फेडोरा, रेडहाट, Suse पर काम नहीं करता है ... – Jessica

0

आप स्थिर यदि आप एक असंगत दिखने यूआई कोई आपत्ति नहीं है अपने विंडो टूलकिट लिंक कर सकते हैं। यह अभी भी ठीक काम करेगा। आप साझा पुस्तकालयों को बस बंडल कर सकते हैं और उन्हें LD_LIBRARY_PATH अंक सुनिश्चित कर सकते हैं। यदि आप वास्तव में कुछ ऐसा करना चाहते हैं जो गतिशील रूप से विभिन्न टूलकिट से लिंक हो, तो आप डलोपेन/डीएलएसआईएम के साथ कुछ कोशिश कर सकते हैं, लेकिन यह पागल हो जाएगा।

आप पार मंच/पार विजेट Toolkit स्थिरता के बारे में परवाह है, तो आपका सर्वश्रेष्ठ दांव कुछ है कि देशी दिखने विगेट्स ही renders हो सकता है; स्विंग जीटीके या विंडोज की तरह दिखने के लिए एक ही कोड प्रस्तुत कर सकता है। मुझे पता है कि आप जावा का उपयोग नहीं कर रहे हैं, लेकिन सी में कोई आसान समाधान नहीं है (स्विंग केवल वैसे भी आपको हिस्सा देगा क्योंकि यह क्यूटी नहीं करता है)।

+0

मुझे सिर्फ यह जानने की जरूरत है कि मैं डेस्कटॉप के साथ चल रहा हूं या नहीं। इसका कारण यह है कि मैं उस जानकारी के आधार पर उपयोगकर्ता को कुछ कार्यक्रम चलाने के विकल्प के साथ प्रस्तुत कर सकता हूं, हालांकि मेरा प्रोग्राम क्यूटी या जीटीके – Jessica

+0

से कोई लिंक नहीं होने के साथ एक साधारण कमांड लाइन है, फिर प्रसंस्करण सूची का उपयोग करने से कुछ खराब कोने के मामले हैं। सिर्फ इसलिए कि वर्तमान उपयोगकर्ता चल रहा है [जीनोम | केडीई] का मतलब यह नहीं है कि * यह * प्रक्रिया उस प्रदर्शन से जुड़ी हुई है (उपयोगकर्ता एक से अधिक एक्स सत्र चला सकते हैं और उनमें विभिन्न डेस्कटॉप वातावरण और विंडो प्रबंधक का उपयोग कर सकते हैं) ... – dmckee

+0

मुझे पता है कि। इसलिए सवाल यहाँ है – Jessica

0

सुनिश्चित नहीं हैं कि यह कैसे मानक है, लेकिन यह फेडोरा 21, स्लैकवेयर 14.1 और Ubuntu 14.04 में संगत है। (अधिक स्वागत)

कोशिश

$ echo $DESKTOP_SESSION 

आशा इस मदद करता है।