2008-11-03 11 views
9

मैंने अपना उबंटू इंस्टॉलेशन स्वचालित कर लिया है - मुझे पाइथन कोड मिला है जो स्वचालित रूप से चलता है (एक क्लीन इंस्टॉल के बाद, लेकिन पहले उपयोगकर्ता लॉगिन से पहले - यह एक अस्थायी /etc/init.d/ स्क्रिप्ट में है) जो सब कुछ सेट करता है अपाचे & मेरी व्यक्तिगत जीनोम प्राथमिकताओं के लिए इसकी कॉन्फ़िगरेशन। यह बाद वाला है जो मुझे परेशानी दे रहा है।मैं gconf के लिए नकली "सक्रिय सत्र" कैसे बना सकता हूं?

यह Ubuntu 8.04 (हार्डी) में ठीक काम किया, लेकिन जब मैं 8.10 (निडर), पहली बार मैं gconf तक पहुँचने का प्रयास के साथ इस का उपयोग करें, मैं इस अपवाद:

विन्यास सर्वर से संपर्क करने में विफल; कुछ संभावित कारण यह हैं कि आपको ORBit के लिए टीसीपी/आईपी नेटवर्किंग सक्षम करने की आवश्यकता है, या सिस्टम क्रैश के कारण आपके पास एनएफएस ताले हैं। जानकारी के लिए http://www.gnome.org/projects/gconf/ देखें। (विवरण - 1: सक्रिय सत्र के भीतर नहीं चल रहा है)

हां, ठीक है, यह चल रहा है जब कोई जीनोम सत्र नहीं है, क्योंकि उपयोगकर्ता ने अभी तक लॉग इन नहीं किया है - हालांकि, यह पहले काम करता था; यह इंटेरेपिड जीनोम (2.24?) के साथ नया प्रतीत होता है।

सीधे gconf की XML फ़ाइलों को संशोधित करने का छोटा, क्या किसी प्रकार का प्रॉक्सी जीनोम सत्र बनाने का कोई तरीका है? या, कोई अन्य सुझाव?

(अधिक विवरण: इस अजगर कोड है कि रूट के रूप में चलाता है, लेकिन setuid के & setgid मुझे अजगर-gconf पैकेज से "gconf" मॉड्यूल का उपयोग कर मेरी प्राथमिकताओं को सेट करने से पहले किया जाना है।)

उत्तर

1

ठीक है, मुझे लगता है कि मैं सवाल समझता हूं। ऐसा लगता है कि आपकी स्क्रिप्ट को सिर्फ डीबीस डिमन शुरू करने की ज़रूरत है, या सुनिश्चित करें कि इसकी शुरुआत हुई है। मेरा मानना ​​है कि "सत्र" यहां एक डीबीस सत्र को संदर्भित करता है। (here is some evidence), जीनोम सत्र नहीं। डबस और gconf दोनों जीनोम के बिना ठीक चलाते हैं।

किसी भी तरह से, एक "सक्रिय सत्र" को एक बहुत बुरा विचार की तरह लगता है। अगर इसकी आवश्यकता होती तो यह केवल इसकी तलाश करेगा।

शायद हम एक पेस्टबिन में स्क्रिप्ट देख सकते हैं? मुझे कोई टिप्पणी करने से पहले इसे वास्तव में देखना चाहिए था।

8

मैं अपनी मशीन पर GConf 2.24 स्थापित करके इसे पुन: उत्पन्न कर सकता हूं। GConf 2.22 ठीक काम करता है, लेकिन 2.24 इसे तोड़ देता है।

जीकॉनएफ लॉन्च करने में विफल रहा है क्योंकि डी-बस नहीं चल रहा है। मैन्युअल रूप से डी-बस और जीकॉनएफ डिमन स्पोनिंग इस काम को फिर से बनाता है।

मैं ऐसा करके डी-बस सत्र बस अंडे देने के लिए निम्नलिखित की कोशिश की:

import dbus 
dummy_bus = dbus.SessionBus() 

... लेकिन यह मिल गया:

dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ExecFailed: dbus-launch failed to autolaunch D-Bus session: Autolaunch error: X11 initialization failed. 

अजीब। ऐसा लगता है कि एक्स नहीं चल रहा है तो यह नहीं आना पसंद नहीं करता है। कि हल करने के लिए, मैन्युअल रूप से dbus-लॉन्च शुरू (iirc os.system() कॉल का उपयोग करें):

$ dbus-launch 
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-eAmT3q94u0,guid=c250f62d3c4739dcc9a12d48490fc268 
DBUS_SESSION_BUS_PID=15836 

आप किसी भी तरह उत्पादन को पार्स और उन्हें वातावरण चर में इंजेक्षन (आप शायद os.putenv का उपयोग करना चाहेंगे) की आवश्यकता होगी । मेरे परीक्षण के लिए, मैं सिर्फ खोल इस्तेमाल किया, और सेट पर्यावरण export DBUS_SESSION_BUS_ADDRESS=blahblah... साथ मैन्युअल वार्स, आदि

इसके बाद, आप उन वातावरण चर आप dbus-launch से प्राप्त के साथ gconftool-2 --spawn शुरू करने की जरूरत है। यह जीसीओएनएफ डिमन लॉन्च करेगा।यदि डी-बस पर्यावरण वर्र्स सेट नहीं हैं, तो डिमन लॉन्च नहीं होगा।

फिर, अपना जीसीओएनएफ कोड चलाएं। बशर्ते आप अपनी स्क्रिप्ट के लिए डी-बस सत्र बस पर्यावरण चर सेट करें, अब आप जीसीओएनएफ डिमन के साथ संवाद करने में सक्षम होंगे।

मुझे पता है कि यह जटिल है।

gconftool-2 एक --direct विकल्प है कि आप सर्वर से संवाद करने की जरूरत के बिना GConf चर सेट करने के लिए सक्षम बनाता है प्रदान करता है, लेकिन मैं पायथन बाइंडिंग के लिए एक समान विकल्प (मैन्युअल एक्सएमएल outputting की कमी) ढूँढने में सक्षम नहीं किया गया है।

संपादित करें: भविष्य में संदर्भ के लिए, यदि किसी को भी एक सामान्य bash लिपि (के रूप में इस सूत्र पर चर्चा कर रहा है के रूप में, एक अजगर स्क्रिप्ट के खिलाफ) के भीतर से dbus-launch चलाना चाहता है, यह काफी आसान के लिए सत्र बस पता पुनः प्राप्त करने के लिए है स्क्रिप्ट के भीतर का उपयोग करें:

#!/bin/bash 

eval `dbus-launch --sh-syntax` 

export DBUS_SESSION_BUS_ADDRESS 
export DBUS_SESSION_BUS_PID 

do_other_stuff_here 
+0

एक ही समस्या हो गई, उन डीबीयूएस वर्र्स को gconf बनाया फिर से सेट करना। धन्यवाद! संदर्भ के लिए, समस्याएं तब शुरू हुई जब विकास कार्य सूची अस्वीकृत हुई। – iElectric

1

धन्यवाद, अली & जेरेमी - दोनों अपने जवाब एक बड़ा मदद कर रहे थे। मैं अभी भी इस पर काम कर रहा हूं (हालांकि मैंने शाम को रोक दिया है)।

सबसे पहले, मैंने अली से संकेत लिया और जेरेमी के सुझाव का हिस्सा कोशिश कर रहा था: मैं "gconftool-2 --spawn" चलाने के लिए dbus-launch का उपयोग कर रहा था। यह मेरे लिए काम नहीं किया; अब मैं समझता हूं कि क्यों (thx, जेरेमी) - मैं उसी पाइथन प्रोग्राम के भीतर से gconf का उपयोग करने की कोशिश कर रहा था जो dbus & gconftool लॉन्च कर रहा था, लेकिन इसके पर्यावरण में पर्यावरण चर नहीं थे - duh।

मैंने उस रणनीति को अलग-अलग सेट किया जब मैंने gconftool-2 के - डायरेक्ट विकल्प को देखा; आंतरिक रूप से, gconftool-2 एपीआई का उपयोग कर रहा है जो gconf python बाइंडिंग द्वारा खुलासा नहीं किया गया है। इसलिए, मैंने अतिरिक्त विधि का पर्दाफाश करने के लिए पायथन-जीएफएन को संशोधित किया, और एक बार जब यह बनाता है (मुझे यह काम करने में कुछ असंबद्ध समस्याएं थीं), हम देखेंगे कि यह चीजों को ठीक करता है - अगर ऐसा नहीं होता है (और शायद यह करता है, क्योंकि उन बाइंडिंग्स का निर्माण सभी gnome बनाने के लिए लगता है!), मुझे उस पहली रणनीति में पर्यावरण चर का प्रबंधन करने का एक बेहतर तरीका मिलेगा।

(मैं एक जवाब यहाँ कल किसी भी तरह से जोड़ देंगे) और यह अगले दिन है: मुझे अपने संशोधित अजगर-gconf, जो मुझे जेरेमी के सरल विचार है, जो काम किया की कोशिश करने के लिए प्रेरित साथ एक छोटी सी मुसीबत में भाग ठीक है - पहले gconf ऑपरेशन करने से पहले, मैंने बस "dbus-launch" चलाया, परिणामस्वरूप नाम-मूल्य जोड़े को पार्स किया, और उन्हें सीधे पाइथन के वातावरण में जोड़ा। ऐसा करने के बाद, मैं "gconftool-2 --spawn" भाग गया। समस्या सुलझ गयी।

+0

यदि नया पायथन एपीआई उपयोगी है, तो कृपया सुनिश्चित करें कि आप अपस्ट्रीम में परिवर्तन सबमिट करते हैं। –