Actkbd systemd के साथ सेवा के रूप में


12

कुछ समय पहले मैंने पूछा था कि स्क्रीन लॉक होने पर संगीत खिलाड़ी को कैसे रोका जाए। इसका उत्तर था actkbd का उपयोग करना जो एक आकर्षण की तरह काम करता है। अब मैं बूटिंग के समय इसे स्वचालित रूप से शुरू करने के लिए एक सेवा के रूप में actkbd जोड़ना चाहता था। तो जैसा कि आप देख सकते हैं कि सेवा को सही तरीके से शुरू किया गया है और यह htop में भी दिखाई देता है। नीचे कुछ उत्पादन:

[root@hostname init.d]# systemctl start actkbd.service
[root@hostname init.d]# systemctl status actkbd.service
actkbd.service - Actkbd: Daemon for X-independent shortcuts
      Loaded: loaded (/etc/systemd/system/multi-user.target.wants/actkbd.service)
      Active: active (running) since Tue, 10 Apr 2012 17:50:36 +0200; 2s ago
     Process: 23526 ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D (code=exited, status=0/SUCCESS)
    Main PID: 23527 (actkbd)
      CGroup: name=systemd:/system/actkbd.service
              └ 23527 /usr/local/sbin/actkbd -d /dev/input/event3 -D
[root@hostname init.d]# systemctl stop actkbd.service
[root@hostname init.d]# ps -C actkbd
  PID TTY          TIME CMD

मेरे पास निम्न actkbd.serviceफ़ाइल है/etc/systemd/system/multi-user.target.wants/

[Unit]
Description=Actkbd: Daemon for X-independent shortcuts

[Service]
Type=forking
ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -15 $MAINPID
Restart=always
User=root

तो समस्या यह है कि सिस्टेमक्टल के साथ सेवा शुरू करने के बाद अगर मैं रिदमबॉक्स को रोकने के लिए अपने सामान्य शॉर्टकट को दबाता हूं तो कुछ नहीं होता है। यदि मैं इसके बजाय सिर्फ /usr/local/sbin/actkbd -d /dev/input/event3 -Dरूट टर्मिनल के माध्यम से कमांड निष्पादित करता हूं तो सब कुछ ठीक काम करता है। यह क्यों?

क्षमा करें यदि यह कुछ स्पष्ट है, तो मैं सिस्टमड व्यवसाय में नया हूं लेकिन मुझे ऐसा कुछ नहीं मिला जिससे मुझे मदद मिली।

चीयर्स।

EDIT: यह अभी भी काम नहीं कर रहा है। अगर किसी के पास कुछ समय होता है तो मैं उसकी सराहना कर सकता हूं अगर कोई इसे पुन: पेश कर सके। अगर ऐसा संभव हुआ तो मैं बग रिपोर्ट दर्ज करूंगा।


समय की कमी के कारण मुझे अभी तक प्रयास actkbdकरना है systemd, लेकिन मुझे संदेह है कि actkbdइनपुट सिस्टम पूरी तरह से शुरू होने से पहले आपके मुद्दे का कुछ करना है - actkbdमेरे विकास लैपटॉप पर एलएसबी सेवा के रूप में शुरू होने पर ठीक काम करता है। आपको यह सुनिश्चित करना चाहिए कि यह evdevमॉड्यूल लॉन्च होने के बाद शुरू किया गया है, और यह कि आपके कीबोर्ड में हमेशा एक ही eventXडिवाइस नोड होता है।
थकाला

उत्तर के लिए धन्यवाद थियोडोरस। मैंने ऊपर जो परीक्षण दिखाए, उन्हें निष्पादित किया गया, जबकि सब कुछ बूट किया गया था। इसलिए सिद्धांत रूप में सभी मॉड्यूल लोड किए जाने चाहिए। डिवाइस नोड ठीक होना चाहिए, क्योंकि कमांड को मैन्युअल रूप से निष्पादित करना हर समय ठीक काम करता है।
अजरेल ३०००

जवाबों:


5

यदि आप चाहते हैं कि उपयोगकर्ता डिवाइस का उपयोग करने और सेवा इकाई को चलाने में सक्षम हो तो आपको एक udevनियम बनाने और MODESउपयोगकर्ता को डिवाइस तक पहुंचने की अनुमति देने के लिए उचित सेट करने की आवश्यकता होगी । बस यूनिट फ़ाइल को शुरू करना User=rootगलत है क्योंकि आप सत्र को रूट के रूप में नहीं बल्कि अपने उपयोगकर्ता के रूप में चला रहे हैं। जब आप इसे एक रूट टर्मिनल से चलाते हैं तो आप अपने उपयोगकर्ताओं के सत्र के अंदर से रूट टर्मिनल को सक्रिय कर रहे होते हैं। इस पर अधिक जानकारी प्राप्त करने के लिए इस पर जानकारी देखें systemd --user

एक udv नियम को एक साथ रखना

udevनियम को पॉपुलेट करने के लिए आपको निम्नलिखित जानकारी देने के लिए निम्न कमांड का उपयोग करना होगा :

udevadm info --path=$(udevadm info -q path -n /dev/input/event3)

उपरोक्त आदेश के आउटपुट से अपना udev नियम बनाएं /etc/udev/rules.d/<device>.conf। इसे अपने पसंदीदा टेक्स्ट एडिटर में खोलें और वेरिएबल्स में भरें

 SUBSYSTEM=="device",
 SYSFS{idVendor}=="ID Vendor Here" ,
 SYSFS{idProduct}=="ID Model Here",
 MODE="666"

udevनियम बनाने और नामकरण के बारे में अधिक जानकारी के लिए man udevअपने लिनक्स वितरण विकी पर एक नज़र डालें । नियमों को स्थापित करने के बाद, रिबूट करें। और फिर X में लॉग इन करते ही यूनिट शुरू करें।

इसके अलावा, यहाँ एक बहुत अधिक सिस्टम सिस्टम फ़ाइल है जो आपने प्रदान की है।

[Unit]
Description=Actkbd: Daemon for X-independent shortcuts

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.