You are not logged in.

#1 2019-07-08 05:31:04

duaner
Member
From: Oklahoma City
Registered: 2018-10-13
Posts: 40
Website

LIRC Service File [Solved]

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.target

Last edited by duaner (2019-07-09 01:06:58)

Offline

#2 2019-07-08 19:23:47

graysky
Wiki Maintainer
From: :wq
Registered: 2008-12-01
Posts: 10,734
Website

Re: LIRC Service File [Solved]

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

#3 2019-07-08 20:30:38

loqs
Member
Registered: 2014-03-06
Posts: 19,101

Re: LIRC Service File [Solved]

CapabilityBoundingSet=CAP_SETEUID

This 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/lock

Could be replaced by tmpfiles.d

Offline

#4 2019-07-08 20:53:07

graysky
Wiki Maintainer
From: :wq
Registered: 2008-12-01
Posts: 10,734
Website

Re: LIRC Service File [Solved]

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

#5 2019-07-09 01:01:41

duaner
Member
From: Oklahoma City
Registered: 2018-10-13
Posts: 40
Website

Re: LIRC Service File [Solved]

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

#6 2019-07-09 20:23:26

graysky
Wiki Maintainer
From: :wq
Registered: 2008-12-01
Posts: 10,734
Website

Re: LIRC Service File [Solved]

@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

#7 2019-07-10 00:49:36

duaner
Member
From: Oklahoma City
Registered: 2018-10-13
Posts: 40
Website

Re: LIRC Service File [Solved]

graysky wrote:

@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/lircd

When 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 ttyUSB0

When I run a command to turn the tv off, I get:

$ irsend 'SEND_ONCE' 'LG_TV' 'power'
Error running command: Protocol error

And 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

Board footer

Powered by FluxBB