Actkbd là dịch vụ với systemd


12

Cách đây một lúc, tôi hỏi cách dừng máy nghe nhạc trong khi màn hình bị khóa. Câu trả lời là sử dụng actkbd hoạt động như một lá bùa. Bây giờ tôi muốn thêm actkbd làm dịch vụ cho systemd để tự động khởi động khi khởi động. Vì vậy, như bạn có thể thấy dịch vụ được bắt đầu một cách chính xác và nó cũng hiển thị trong htop. Một số đầu ra dưới đây:

[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

Tôi có actkbd.servicetập tin sau/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

Vì vậy, vấn đề là sau khi bắt đầu dịch vụ với systemctl, không có gì xảy ra nếu tôi nhấn phím tắt thông thường để tạm dừng Rhybeatbox. Nếu tôi thay vào đó chỉ thực hiện lệnh /usr/local/sbin/actkbd -d /dev/input/event3 -Dthông qua một thiết bị đầu cuối gốc thì mọi thứ đều hoạt động tốt. Lý do tại sao mà?

Xin lỗi nếu đó là một điều hiển nhiên, tôi mới tham gia kinh doanh hệ thống nhưng tôi không thể tìm thấy bất cứ điều gì giúp tôi.

Chúc mừng.

EDIT: Điều này vẫn không hoạt động. Nếu ai đó có thời gian tôi sẽ đánh giá cao nếu người ta có thể thử và tái tạo nó. Nếu có thể thì tôi sẽ nộp báo cáo lỗi.


Tôi chưa thử actkbdvới systemd, do thiếu thời gian, nhưng tôi nghi ngờ rằng vấn đề của bạn có cái gì để làm với actkbdđược bắt đầu trước khi hệ thống được khởi đầu vào đầy đủ - actkbdhoạt động tốt khi bắt đầu như là một LSB dịch vụ trên máy tính xách tay phát triển của tôi. Bạn nên đảm bảo rằng nó được khởi động sau khi evdevmô-đun được khởi chạy và bàn phím của bạn luôn có cùng một eventXnút thiết bị.
thkala

Cảm ơn đã trả lời Theodoros. Các thử nghiệm mà tôi đưa ra ở trên đã được thực hiện trong khi mọi thứ đã được khởi động. Vì vậy, trong lý thuyết tất cả các mô-đun nên được tải. Nút thiết bị cũng sẽ ổn vì thực hiện lệnh thủ công hoạt động tốt mọi lúc.
Azrael3000

Câu trả lời:


5

Nếu bạn muốn người dùng có thể truy cập thiết bị và chạy đơn vị dịch vụ thì bạn sẽ cần đưa ra udevquy tắc và đặt quyền MODESđể cho phép người dùng truy cập thiết bị. Đơn giản chỉ cần bắt đầu tệp đơn vị User=rootlà không chính xác vì bạn không chạy phiên dưới dạng root mà là người dùng của bạn. Khi bạn chạy nó từ thiết bị đầu cuối gốc, bạn đang kích hoạt thiết bị đầu cuối gốc từ bên trong phiên người dùng của bạn. Để có thêm thông tin về điều này tra cứu thông tin trên systemd --user.

Đặt một quy tắc udev

Sử dụng lệnh sau để cung cấp cho bạn thông tin mà bạn sẽ cần để điền udevquy tắc:

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

Từ đầu ra của lệnh trên, tạo quy tắc udev của bạn trong /etc/udev/rules.d/<device>.conf. Mở nó trong trình soạn thảo văn bản yêu thích của bạn và điền vào các biến

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

Để biết thêm thông tin về udevquy tắc đặt và đặt tên, hãy xem man udevhoặc Wiki phân phối Linux của bạn. Sau khi thiết lập các quy tắc, khởi động lại. Và sau đó bắt đầu đơn vị một khi đăng nhập vào X.

Ngoài ra, đây là một tệp đơn vị hệ thống lành mạnh hơn nhiều so với tệp mà bạn đã cung cấp.

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

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.