Actkbd เป็นบริการที่มี systemd


12

ไม่นานมานี้ฉันถามวิธีหยุดเครื่องเล่นเพลงขณะที่หน้าจอล็อคอยู่ คำตอบคือการใช้ actkbd ซึ่งทำงานเหมือนมีเสน่ห์ ตอนนี้ฉันต้องการเพิ่ม actkbd เป็นบริการเพื่อ systemd เพื่อเริ่มโดยอัตโนมัติเมื่อบูท ดังนั้นคุณจะเห็นว่าบริการเริ่มต้นอย่างถูกต้องและจะปรากฏใน 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

ดังนั้นปัญหาคือหลังจากเริ่มบริการด้วย systemctl ไม่มีอะไรเกิดขึ้นถ้าฉันกดทางลัดปกติของฉันเพื่อหยุด Rhythmbox ชั่วคราว ถ้าฉันเพียงแค่รันคำสั่ง/usr/local/sbin/actkbd -d /dev/input/event3 -Dผ่านรูทเทอร์มินัลทุกอย่างก็ใช้ได้ดี ทำไมล่ะ

ขออภัยหากเป็นสิ่งที่ชัดเจนฉันยังใหม่กับธุรกิจ systemd แต่ฉันไม่พบสิ่งที่ช่วยฉัน

ไชโย

แก้ไข: นี่ยังไม่ทำงาน หากใครบางคนมีเวลาฉันจะขอบคุณถ้ามีคนลองและทำซ้ำ หากเป็นไปได้ฉันจะรายงานข้อผิดพลาด


ฉันยังไม่ลองactkbdด้วยsystemdเนื่องจากไม่มีเวลา แต่ผมสงสัยว่าปัญหาของคุณมีสิ่งที่จะทำอย่างไรกับactkbdการถูกเริ่มต้นก่อนที่ระบบการป้อนข้อมูลจะเริ่มต้นได้อย่างเต็มที่ - actkbdทำงานได้ดีเมื่อเริ่มต้นเป็น LSB ให้บริการบนแล็ปท็อปการพัฒนาของฉัน คุณควรตรวจสอบให้แน่ใจว่ามันเริ่มต้นหลังจากevdevโมดูลเปิดตัวและแป้นพิมพ์ของคุณมีeventXโหนดอุปกรณ์เดียวกันเสมอ
thkala

ขอบคุณสำหรับการตอบ Theodoros การทดสอบที่ฉันแสดงด้านบนถูกดำเนินการในขณะที่ทุกอย่างถูกบูต ดังนั้นในทางทฤษฎีแล้วควรโหลดโมดูลทั้งหมด โหนดอุปกรณ์ก็ควรจะปรับเช่นกันในขณะที่การดำเนินการคำสั่งด้วยตนเองทำงานได้ดีตลอดเวลา
Azrael3000

คำตอบ:


5

หากคุณต้องการให้ผู้ใช้สามารถเข้าถึงอุปกรณ์และเรียกใช้บริการจากนั้นคุณจะต้องสร้างudevกฎและตั้งค่าที่เหมาะสมMODESเพื่อให้สิทธิ์ผู้ใช้ในการเข้าถึงอุปกรณ์ เพียงแค่เริ่มต้นไฟล์หน่วยที่User=rootไม่ถูกต้องเนื่องจากคุณไม่ได้เรียกใช้เซสชันในฐานะรูท แต่เป็นผู้ใช้ของคุณ เมื่อคุณรันจากเทอร์มินัลรูทคุณจะเปิดใช้งานรูทเทอร์มินัลจากภายในเซสชันผู้ใช้ systemd --userที่จะได้รับข้อมูลเพิ่มเติมเกี่ยวกับลักษณะนี้ข้อมูลเกี่ยวกับ

รวบรวมกฎ udev ไว้ด้วยกัน

ใช้คำสั่งต่อไปนี้เพื่อให้ข้อมูลที่คุณต้องการเพื่อเติมข้อมูล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หรือวิกิของการกระจาย Linux ของคุณ หลังจากตั้งกฎให้รีบูต จากนั้นเริ่มหน่วยเมื่อเข้าสู่ระบบ X

นอกจากนี้ที่นี่เป็นมากไฟล์หน่วยระบบมีสติมากขึ้นแล้วหนึ่งที่คุณได้ให้

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

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.