You are not logged in.
Pages: 1
I wanted to get lirc to run as the lirc user, rather than root, so I made some changes to the service file. I use a USB dongle, so lircd has to create lock files. I only managed to fix that by setting the lock directory's group to lock and giving the lirc user the same.
It works, but it's not pretty. Would someone with some systemd experience mind looking at this and telling me if anything is wrong with it?
[Unit]
Documentation=man:lircd(8)
Documentation=http://lirc.org/html/configure.html
Description=Flexible IR remote input/output application support
Wants=lircd-setup.service
After=network.target lircd-setup.service
[Service]
Type=simple
PermissionsStartOnly=true
ExecStartPre=-/usr/bin/mkdir /run/lirc
ExecStartPre=-/usr/bin/chown -R lirc: /run/lirc
ExecStartPre=-/usr/bin/chown :lock /run/lock
ExecStartPre=-/usr/bin/chmod g+w /run/lock
User=lirc
Group=lirc
Restart=always
RestartSec=10
ExecStart=/usr/sbin/lircd --nodaemon
; Hardening opts, see systemd.exec(5). Doesn't add much unless
; not running as root.
;
; # Required for dropping privileges in --effective-user.
CapabilityBoundingSet=CAP_SETEUID
MemoryDenyWriteExecute=true
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
[Install]
WantedBy=multi-user.targetLast edited by duaner (2019-07-09 01:06:58)
Offline
Never tired myself but found the following on a google, relevant?
(Suspect you already found this one): http://www.lirc.org/html/configuration-guide.html (scroll to bottom, section A14)
https://arch-ed.dk/systemd-lircd-mceusb … arch-linux
https://bugzilla.redhat.com/show_bug.cgi?id=1268675
Last edited by graysky (2019-07-08 20:49:14)
Offline
CapabilityBoundingSet=CAP_SETEUIDThis does not make sense as the function drop_privileges in daemons/lircd.cpp returns without calling setuid e.t.c. when uid != 0
ExecStartPre=-/usr/bin/mkdir /run/lirc
ExecStartPre=-/usr/bin/chown -R lirc: /run/lirc
ExecStartPre=-/usr/bin/chown :lock /run/lock
ExecStartPre=-/usr/bin/chmod g+w /run/lockCould be replaced by tmpfiles.d
Offline
I got it working, see the wiki: https://wiki.archlinux.org/index.php/LI … an_as_root
Last edited by graysky (2019-07-08 22:57:05)
Offline
Awesome, guys! I've learned a lot from this. I think I can clean up a few of my other attempts at service files now.
I followed the wiki entry, removing my earlier cruft. I had to add the following to /etc/tmpfiles.d/lirc.conf:
e /run/lock 0775 - lock -I also had to add this to /etc/udev/rules.d/60-lirc.rules:
#Bus 004 Device 002: ID 0403:f850 Future Technology Devices International, Ltd USB-UIRT (Universal Infrared Receiver+Transmitter)
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="f850", GROUP="lirc", MODE="0660"Are either of those worth noting/adding to the wiki?
Last edited by duaner (2019-07-09 01:03:03)
Offline
@duaner - What happens if you exclude the tmpfile line you added? Modify back, reboot. What is the output in journalctl for lircd?
Interestingly, Fedora ships their lircd package with two udev rules: https://src.fedoraproject.org/rpms/lirc … .spec#_255
Last edited by graysky (2019-07-09 20:25:32)
Offline
@duaner - What happens if you exclude the tmpfile line you added? Modify back, reboot. What is the output in journalctl for lircd?
I get this on startup:
Jul 09 19:38:06 duane-desk lircd-0.10.1[466]: Notice: Version: lircd 0.10.1
Jul 09 19:38:06 duane-desk systemd[1]: Started Permit User Sessions.
Jul 09 19:38:06 duane-desk lircd-0.10.1[466]: Notice: System info: Linux duane-desk 5.1.16-arch1-1-ARCH #1 SMP PREEMPT Wed Jul>
Jul 09 19:38:06 duane-desk systemd[1]: Started Getty on tty1.
Jul 09 19:38:07 duane-desk dhcpcd[469]: DUID 00:04:00:00:00:00:00:00:00:00:00:00:00:21:85:92:db:2b
Jul 09 19:38:06 duane-desk systemd[1]: Reached target Login Prompts.
Jul 09 19:38:07 duane-desk dhcpcd[469]: eth0: IAID 85:92:db:2b
Jul 09 19:38:07 duane-desk systemd[1]: Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch.
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Info: Initial device: /dev/ttyUSB0
Jul 09 19:38:07 duane-desk lircd[466]: lircd-0.10.1[466]: Info: lircd: Opening log, level: Info
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Info: Initial device: /dev/ttyUSB0
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: driver: uirt2_raw
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: output: /var/run/lirc/lircd
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: nodaemon: 1
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: plugindir: /usr/lib/lirc/plugins
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: logfile: syslog
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: immediate-init: 0
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: permission: 666
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: driver-options:
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: pidfile: /var/run/lirc/lircd.pid
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: listen: 0
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: connect: (null)
Jul 09 19:38:07 duane-desk lircd[466]: lircd-0.10.1[466]: Info: Using remote: LG_TV.
Jul 09 19:38:07 duane-desk lircd[466]: lircd-0.10.1[466]: Notice: lircd(uirt2_raw) ready, using /var/run/lirc/lircd
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: userelease: 0
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: effective_user: (null)
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: release_suffix: _EVUP
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: allow_simulate: 0
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: repeat_max: 600
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: configfile: /etc/lirc/lircd.conf
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Options: dynamic_codes: (null)
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Current driver: uirt2_raw
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Driver API version: 3
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Driver version: 0.10.0
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: Driver info: No info available
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Info: lircd: Opening log, level: Info
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Info: Using remote: LG_TV.
Jul 09 19:38:07 duane-desk lircd-0.10.1[466]: Notice: lircd(uirt2_raw) ready, using /var/run/lirc/lircdWhen I plug the dongle in, I get:
Jul 09 19:42:07 duane-desk kernel: usb 4-1: new full-speed USB device number 2 using uhci_hcd
Jul 09 19:42:07 duane-desk kernel: usb 4-1: New USB device found, idVendor=0403, idProduct=f850, bcdDevice= 6.00
Jul 09 19:42:07 duane-desk kernel: usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jul 09 19:42:07 duane-desk kernel: usb 4-1: Product: USB-UIRT
Jul 09 19:42:07 duane-desk kernel: usb 4-1: Manufacturer: FTDI
Jul 09 19:42:08 duane-desk kernel: usbcore: registered new interface driver ftdi_sio
Jul 09 19:42:08 duane-desk kernel: usbserial: USB Serial support registered for FTDI USB Serial Device
Jul 09 19:42:08 duane-desk kernel: ftdi_sio 4-1:1.0: FTDI USB Serial Device converter detected
Jul 09 19:42:08 duane-desk kernel: usb 4-1: Detected FT232RL
Jul 09 19:42:08 duane-desk kernel: usb 4-1: FTDI USB Serial Device converter now attached to ttyUSB0When I run a command to turn the tv off, I get:
$ irsend 'SEND_ONCE' 'LG_TV' 'power'
Error running command: Protocol errorAnd the journal shows:
Jul 09 19:43:12 duane-desk irsend[709]: lirc_command_run: Sending: SEND_ONCE LG_TV power
Jul 09 19:43:12 duane-desk kernel: lircd[466]: segfault at 8 ip 00007f329cc0cc81 sp 00007ffc250c18d0 error 4 in uirt2_raw.so[7>
Jul 09 19:43:12 duane-desk kernel: Code: fe ff ff 90 0f 1f 44 00 00 be 02 00 00 00 e9 96 fe ff ff 90 0f 1f 44 00 00 41 57 41 5>
Jul 09 19:43:12 duane-desk kernel: audit: type=1701 audit(1562719392.198:48): auid=4294967295 uid=973 gid=973 ses=4294967295 p>
Jul 09 19:43:12 duane-desk audit[466]: ANOM_ABEND auid=4294967295 uid=973 gid=973 ses=4294967295 pid=466 comm="lircd" exe="/us>
Jul 09 19:43:12 duane-desk lircd-0.10.1[466]: Notice: accepted new client on /var/run/lirc/lircd
Jul 09 19:43:12 duane-desk lircd[466]: lircd-0.10.1[466]: Notice: accepted new client on /var/run/lirc/lircd
Jul 09 19:43:12 duane-desk lircd[466]: lircd-0.10.1[466]: could not create lock file "/var/lock/LCK..ttyUSB0": Permission deni>
Jul 09 19:43:12 duane-desk lircd[466]: lircd-0.10.1[466]: Error: uirt2_raw: could not create lock files
Jul 09 19:43:12 duane-desk lircd[466]: lircd-0.10.1[466]: Warning: Failed to initialize hardware
Jul 09 19:43:12 duane-desk lircd[466]: lircd-0.10.1[466]: could not create lock file "/var/lock/LCK..ttyUSB0": Permission deni>
Jul 09 19:43:12 duane-desk lircd[466]: lircd-0.10.1[466]: Error: uirt2_raw: could not create lock files
Jul 09 19:43:12 duane-desk lircd-0.10.1[466]: could not create lock file "/var/lock/LCK..ttyUSB0": Permission denied
Jul 09 19:43:12 duane-desk lircd-0.10.1[466]: Error: uirt2_raw: could not create lock files
Jul 09 19:43:12 duane-desk lircd-0.10.1[466]: Warning: Failed to initialize hardware
Jul 09 19:43:12 duane-desk lircd-0.10.1[466]: could not create lock file "/var/lock/LCK..ttyUSB0": Permission denied
Jul 09 19:43:12 duane-desk lircd-0.10.1[466]: Error: uirt2_raw: could not create lock files
Jul 09 19:43:12 duane-desk kernel: audit: type=1130 audit(1562719392.418:49): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='>
Jul 09 19:43:12 duane-desk audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-coredump@0-710>
Jul 09 19:43:12 duane-desk systemd[1]: Created slice system-systemd\x2dcoredump.slice.
Jul 09 19:43:12 duane-desk systemd[1]: Started Process Core Dump (PID 710/UID 0).
Jul 09 19:43:12 duane-desk irsend[709]: irsend: bad return packet
Jul 09 19:43:12 duane-desk kernel: audit: type=1131 audit(1562719392.881:50): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='>
Jul 09 19:43:12 duane-desk audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=lircd comm="systemd" ex>
Jul 09 19:43:12 duane-desk irsend[709]: State 0: bad packet:
Jul 09 19:43:12 duane-desk systemd[1]: lircd.service: Main process exited, code=dumped, status=11/SEGV
Jul 09 19:43:12 duane-desk systemd[1]: lircd.service: Failed with result 'core-dump'.
Jul 09 19:43:13 duane-desk systemd-coredump[711]: Process 466 (lircd) of user 973 dumped core.
Stack trace of thread 466:
#0 0x00007f329cc0cc81 n/a (uirt2_raw.so)
#1 0x00007f329cc0ba21 n/a (uirt2_raw.so)
#2 0x00007f329d6ccbd3 send_ir_ncode (liblirc.so.0)
#3 0x000055db09cfb691 n/a (lircd)
#4 0x000055db09cfc08f n/a (lircd)
#5 0x000055db09cfcfbc n/a (lircd)
#6 0x000055db09cfd587 n/a (lircd)
#7 0x000055db09cf7ed3 n/a (lircd)
#8 0x00007f329d31dee3 __libc_start_main (libc.so.6)
#9 0x000055db09cf7f0a n/a (lircd)
Jul 09 19:43:13 duane-desk audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-coredump@0-710->
Jul 09 19:43:13 duane-desk kernel: audit: type=1131 audit(1562719393.068:51): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='>
Jul 09 19:43:13 duane-desk systemd[1]: systemd-coredump@0-710-0.service: Succeeded.And, of course, changing the group ownership/permissions of /run/lock, which is root:root 755 by default, fixes it. I just installed from the 1 July livedvd, and haven't changed much yet.
Last edited by duaner (2019-07-10 00:52:15)
Offline
Pages: 1