Actkbd sebagai layanan dengan systemd


12

Beberapa waktu yang lalu saya bertanya bagaimana cara menghentikan pemutar musik saat layar terkunci. Jawabannya adalah menggunakan actkbd yang berfungsi seperti mantra. Sekarang saya ingin menambahkan actkbd sebagai layanan ke systemd untuk memulainya secara otomatis saat booting. Sehingga Anda dapat melihat layanan dimulai dengan benar dan itu muncul di htop juga. Beberapa output di bawah ini:

[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

Saya memiliki actkbd.servicefile berikut di/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

Jadi masalahnya adalah bahwa setelah memulai layanan dengan systemctl tidak ada yang terjadi jika saya menekan pintasan saya yang biasa untuk menjeda Rhythmbox. Jika saya hanya menjalankan perintah /usr/local/sbin/actkbd -d /dev/input/event3 -Dmelalui terminal root semuanya bekerja dengan baik. Kenapa begitu?

Maaf jika ini sesuatu yang jelas, saya baru dalam bisnis systemd tetapi saya tidak dapat menemukan apa pun yang membantu saya.

Bersulang.

EDIT: Ini masih tidak berfungsi. Jika seseorang memiliki waktu, saya akan menghargainya jika seseorang dapat mencoba dan mereproduksinya. Jika itu mungkin maka saya akan mengajukan laporan bug.


Saya belum mencoba actkbddengan systemd, karena kurangnya waktu, tapi saya menduga bahwa masalah Anda memiliki sesuatu untuk dilakukan dengan actkbdyang dimulai sebelum sistem input sepenuhnya diinisialisasi - actkbdbekerja dengan baik ketika memulai sebagai LSB layanan pada laptop perkembangan saya. Anda harus memastikan bahwa itu dimulai setelah evdevmodul diluncurkan, dan keyboard Anda selalu memiliki eventXsimpul perangkat yang sama .
thkala

Terima kasih atas balasannya Theodoros. Tes yang saya tunjukkan di atas dijalankan ketika semuanya di-boot. Jadi secara teori semua modul harus dimuat. Node perangkat juga harus baik karena mengeksekusi perintah secara manual berfungsi dengan baik setiap saat.
Azrael3000

Jawaban:


5

Jika Anda ingin pengguna dapat mengakses perangkat dan menjalankan unit layanan maka Anda harus membuat udevaturan dan mengatur yang tepat MODESuntuk memungkinkan izin pengguna untuk mengakses perangkat. Cukup memulai file unit karena User=rootsalah karena Anda tidak menjalankan sesi sebagai root tetapi sebagai pengguna Anda. Ketika Anda menjalankannya dari terminal root, Anda mengaktifkan terminal root dari dalam sesi pengguna Anda. Untuk mendapatkan informasi lebih lanjut tentang ini, cari informasi di systemd --user.

Menyusun aturan udev

Gunakan perintah berikut untuk memberi Anda informasi yang Anda perlukan untuk mengisi udevaturan:

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

Dari output perintah di atas, buat aturan udev Anda di /etc/udev/rules.d/<device>.conf. Buka di editor teks favorit Anda dan isi variabel

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

Untuk informasi lebih lanjut tentang membuat dan memberi nama udevaturan, lihat man udevatau Wiki distribusi Linux Anda. Setelah mengatur aturan, reboot. Dan kemudian mulai unit setelah masuk ke X.

Selain itu, ini adalah file unit sistem yang jauh lebih waras daripada yang Anda berikan.

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

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.