मैं xscreensaver, kscreensaver, या gnome-screensaver को अवरुद्ध करने के लिए एक सभ्य, गैर-लंगड़ा तरीका ढूंढ रहा हूं, जो शायद स्क्रीनसेवर-अज्ञेय तरीके से चल रहा हो, और यह पूरी तरह सकारात्मक रूप से तेज निष्पादित करना होगा।क्या लिनक्स में स्क्रीनसेवर को बाधित करने का कोई शानदार तरीका है?
मैंने xscreensaver FAQ (http://www.jwz.org/xscreensaver/faq.html) पढ़ा है।
मेरे पास एक gtk आधारित गेम प्रोग्राम है जो ऑडियो के कई चैनलों को मिलाते समय 30 फ्रेम/सेकेंड क्रैंकिंग कर रहा है, और चूंकि इसे जॉयस्टिक द्वारा नियंत्रित किया जाता है, कभी-कभी "स्क्रीन" स्क्रीनसेवर किक कर देगा। मैंने उद्धरणों में "द" रखा है, क्योंकि कम से कम तीन अलग-अलग लोकप्रिय स्क्रीनसेवर, xscreensaver, gnome-screensaver, और kscreensaver हैं, जिनमें से प्रत्येक अपनी अनूठी और क्लंकी विधियों के साथ है जिसके द्वारा कोई एप्लिकेशन उन्हें रोक सकता है।
क्या किसी ने कोड को इन सभी को तेजी से कोड में अवरुद्ध करने के लिए कोड को समाहित किया है? ओह, और यह जीपीएल संगत होना चाहिए।
वर्तमान में मेरा कोड आसानी से असंगत स्क्रीनसेवर डेवलपर्स के बारे में चिंतित है, यदि कोई स्क्रीनसेवर पता चला है और जॉयस्टिक उपयोग में है, और वास्तव में उपयोगकर्ता को स्क्रीनसेवर को मैन्युअल रूप से अक्षम करने की सलाह देने के अलावा कुछ भी करने की कोशिश नहीं करता है, केवल दूसरी बात जो मैं सोच सकता हूं वह इतनी अविश्वसनीय रूप से बदसूरत है कि मैं इसे करने से इंकार कर देता हूं।
बस सोच रहा है कि किसी और ने इसमें क्या किया है, और उन्होंने क्या किया है, और यदि उन्होंने कुछ भी किया है, तो अगर यह बदसूरत था तो ऐसा लगता है कि यह होना चाहिए, या अगर कुछ सुरुचिपूर्ण समाधान है वहाँ लगता है कि शायद एक्स घटनाओं को संश्लेषित करना संभवतः स्क्रीनसेवर को बेवकूफ बनाने के लिए सोच रहा है कि कुछ गतिविधि एक सार्वभौमिक तरीके से चाल कर सकती है, लेकिन मुझे सच में यकीन नहीं है कि यह कैसे करना है (और उम्मीद है कि आपको होने की आवश्यकता नहीं होगी इसे करने के लिए रूट।)
कोई विचार?
धन्यवाद,
- स्टीव
हम्म, unfortuanately, कम से कम फेडोरा कोर 8 पर, इस काम करने के लिए प्रकट नहीं होता।
एक्सडीजी-स्क्रीनसेवर स्क्रिप्ट वहां है, और ऐसा लगता है कि काम करने का इरादा है, यह वास्तव में काम नहीं करता है।
एक बार जब आप कर मैन्युअल रूप से "XDG-स्क्रीनसेवर निलंबित खिड़की-आईडी", जहां खिड़की आईडी
xwindow_id = GDK_WINDOW_XWINDOW (GTK_WIDGET (widget)->window);
के माध्यम से या कि क्या खिड़की आईडी xprop के माध्यम से मिल गया है कार्यक्रम के भीतर से मिल गया है, और XDG-स्क्रीनसेवर रन दो प्रक्रियाओं बनाई गई हैं:
[[email protected] wordwarvi]$ ps -efa | grep xdg scameron 4218 1 0 20:12 pts/2 00:00:00 /bin/sh /usr/bin/xdg-screensaver suspend 0x3a00004 scameron 4223 1 0 20:12 pts/2 00:00:00 /bin/sh /usr/bin/xdg-screensaver suspend 0x3a00004 scameron 4313 3151 0 20:15 pts/1 00:00:00 grep xdg [[email protected] wordwarvi]$
और वे मर जाते हैं कभी नहीं, कार्यक्रम वे माना जाता है मरता के लिए इंतजार कर रहे हैं के बाद भी, और स्क्रीनसेवर कभी नहीं फिर से सक्षम है।
[[email protected] wordwarvi]$ xdg-screensaver status disabled [[email protected] wordwarvi]$ ls -ltr /tmp | grep xdg -rw------- 1 scameron scameron 15 2009-01-20 20:12 xdg-screensaver-scameron--0.0 [[email protected] wordwarvi]$
एक्सडीजी-स्क्रीनसेवर फिर से शुरू विंडो-आईडी चलाना स्क्रीनसेवर को फिर से शुरू नहीं करता है।
स्क्रीनसेवर को पुनः चालू करने, मैं मैन्युअल रूप से उन्हें मार, और मैन्युअल रूप से फ़ाइलें यह/tmp में चारों ओर छोड़ देता है दूर करने के लिए है:
[[email protected] wordwarvi]$ kill 4218 4223 [[email protected] wordwarvi]$ rm /tmp/xdg-screensaver-scameron--0.0 [[email protected] wordwarvi]$ xdg-screensaver status enabled [[email protected] wordwarvi]$
तो, अच्छे इरादों, लेकिन वास्तव में काम करने के लिए प्रतीत नहीं होता ।
नहीं है, निश्चित रूप से यह हर फ्रेम को चलाने के लिए उम्मीद नहीं है, लेकिन यह हिचकी के कारण जब यह चलती है नहीं करना चाहते, सब है। एक्स घटनाओं को संश्लेषित करने के अपने विचार के साथ, मैं कल्पना कर रहा था कि स्क्रीन सेवर को लगता है कि गतिविधि होने के कारण यह अक्सर पर्याप्त होगा।
एक्सडीजी-स्क्रीनसेवर को देखकर (जो एक शेल स्क्रिप्ट लगता है जो आखिरकार मेरी प्रक्रिया के लिए "प्रतीक्षा" करता है - ठंडा) ऐसा लगता है कि मैं जो चाहता हूं उसे करने के लिए ऐसा लगता है। मुझे पता था कि मैं इस समस्या का सामना करने वाला एकमात्र या पहला नहीं हो सकता था।
धन्यवाद!
- स्टीव
XDG-स्क्रीनसेवर (XDG-utils संस्करण 1.1.0 के रूप में) (D-Feet कभी बदलते डी-बस विधि के नाम आत्मनिरीक्षण के लिए विशेष रूप से उपयोगी है) चल रहा स्क्रीनसेवर कार्यक्रम का पता लगाने में विफल रहता है: यह एक फ़ंक्शन detectDE() है जो कई लोकप्रिय डेस्कटॉप वातावरणों की जांच करता है। उदाहरण: यदि आप केडीई को अपने डेस्कटॉप वातावरण के रूप में चलाने के लिए होते हैं तो xdg-screensaver झूठा मानता है कि आप केडीई के डिफ़ॉल्ट स्क्रीनसेवर भी चलाएंगे। यदि आपने अपने डेस्कटॉप को कस्टमाइज़ किया है और इसके बजाय जेमी ज़विंस्किस xscreensaver का उपयोग करने का निर्णय लिया है तो यह धारणा झूठी है और xdg-screensaver विज्ञापित के रूप में काम नहीं करेगा। IMHO यह एक बग है। – pefu
मुझे अभी पता चला है कि xdg-utils को संस्करण 1.1.1 में अपग्रेड करके ऊपर दी गई मेरी टिप्पणी में वर्णित बग को ठीक किया गया है। – pefu