ubuntuusers.de

systemd

Status: Ungelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

Tom7320

Anmeldungsdatum:
2. Dezember 2007

Beiträge: 94

Moin!

Ich versuche mich gerade an einer eigentlich ganz simplen Aufgabe: ich möchte das Programm irexec automatisch beim Booten starten. Dafür haben ich diesen Thread mit einer Lösung gefunden (ganz unten). Leider funktioniert das bei mir nicht:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
root@bee:~# systemctl status irexec
● irexec.service - LIRC Infrared Signal Exec
   Loaded: loaded (/etc/systemd/system/irexec.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Di 2016-07-12 17:55:49 CEST; 2min 36s ago
  Process: 782 ExecStart=/usr/sbin/irexec (code=exited, status=203/EXEC)
 Main PID: 782 (code=exited, status=203/EXEC)

Jul 12 17:55:49 bee systemd[1]: Started LIRC Infrared Signal Exec.
Jul 12 17:55:49 bee systemd[1]: irexec.service: Main process exited, code=exited, status=203/EXEC
Jul 12 17:55:49 bee systemd[1]: irexec.service: Unit entered failed state.
Jul 12 17:55:49 bee systemd[1]: irexec.service: Failed with result 'exit-code'.
root@bee:~# cat /etc/systemd/system/irexec.service
[Unit]
Description=LIRC Infrared Signal Exec

[Service]
Type=simple
ExecStart=/usr/sbin/irexec

[Install]
WantedBy=multi-user.target
root@bee:~# ps -A | grep irexec
root@bee:~#

Warum klappt das nicht? Hat jemand mit mehr systemd Erfahrung vielleicht einen Tipp für mich? Ich würde mich freuen!

Danke!

Viele Grüße

Thorsten

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Welche Lirc-Version setzt du denn ein? In den Paketquellen von Ubuntu steckt ja noch die (alte) 0.9.0, die sehr wenig mit dem aktuellen Stand (die 0.9.4 ist ja erst vor kurzen rausgekommen) zu tun hat. Damit die irexec.service so wie in dem Bugtracker beschrieben funktionieren kann, musst du es ermöglichen, dass lircd per Systemd Socket-Activation automatisch starten kann - im Git ist das über https://sourceforge.net/p/lirc/git/ci/master/tree/systemd/lircd.socket und https://sourceforge.net/p/lirc/git/ci/master/tree/systemd/lircd.service umgesetzt. Das beißt sich aber mit der Version aus den Ubuntu-Quellen, weil lircd da noch keine eigene Konfigurationsdatei kennt, aus der er beim Start die Einstellungen lesen kann - d.h. man benötigt ein Start-Skript, das dem Programm die Argumente direkt mitgibt.

lircd wird unter Ubuntu 16.04 noch klassisch über SysVinit gestartet - wenn ich das Start-Skript (/etc/init.d/lirc, Zeile 111, 118 ff. und 134 ff. richtig verstehe, sollte er irexec automatisch mitstarten, wenn die Datei /etc/lirc/lircrc existiert und weder in dieser Datei noch in der /etc/lirc/lircd.conf eine Zeile vorkommt, die mit

#UNCONFIGURED

beginnt.

Tom7320

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2007

Beiträge: 94

Hallo!

Danke für die Antwort! Ich muss mich etwas korrigieren: zuerst hatte ich einen ganz banalen Fehler gemacht nämlich einen falschen Pfad in der irexec.service. Nachdem ich das korrigiert hatte, ging es leider noch immer nicht:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
root@bee:~# systemctl status irexec
● irexec.service - LIRC Infrared Signal Exec
   Loaded: loaded (/etc/systemd/system/irexec.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Di 2016-07-12 20:21:01 CEST; 1min 38s ago
  Process: 702 ExecStart=/usr/bin/irexec (code=exited, status=1/FAILURE)
 Main PID: 702 (code=exited, status=1/FAILURE)

Jul 12 20:21:01 bee systemd[1]: Started LIRC Infrared Signal Exec.
Jul 12 20:21:01 bee irexec[702]: irexec: could not connect to socket
Jul 12 20:21:01 bee irexec[702]: irexec: No such file or directory
Jul 12 20:21:01 bee systemd[1]: irexec.service: Main process exited, code=exited, status=1/FAILURE
Jul 12 20:21:01 bee systemd[1]: irexec.service: Unit entered failed state.
Jul 12 20:21:01 bee systemd[1]: irexec.service: Failed with result 'exit-code'.
root@bee:~# journalctl _PID=702
-- Logs begin at Di 2016-07-12 20:21:00 CEST, end at Di 2016-07-12 20:22:47 CEST. --
Jul 12 20:21:01 bee irexec[702]: irexec: could not connect to socket
Jul 12 20:21:01 bee irexec[702]: irexec: No such file or directory

Das Socket-Problem ist hier im Wiki beschrieben. Der Anleitung dort nach habe ich die rc.local so angepasst:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
root@bee:~# cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

mkdir -p /var/run/lirc/ && ln -s /dev/lircd /var/run/lirc/lircd

exit 0

Dies hat leider nicht gebracht und führt noch immer zum selben Fehler... ☹

Ich habe die original Lirc-Version 0.9.0 aus den Paketquellen installiert. Da ich mir lirc gar nicht zu potte gekommen bin, habe ich inputlirc zusätzlich installiert. Das heißt aber, wenn ich das Wiki richtig verstehe, dass der lirc Daemon gar nicht gebraucht wird und folgerichtig auch nicht gestartet wird.

Um aber die irexec zu starten, habe ich wie oben beschrieben versucht nur irexec per systemd zu starten.

Das Startscript scheint irexec aber nicht ohne lircd zu starten?!? Meine hardware.conf:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
root@bee:~# cat /etc/lirc/hardware.conf
# /etc/lirc/hardware.conf
#
#Chosen Remote Control
REMOTE="None"
REMOTE_MODULES=""
REMOTE_DRIVER="devinput"
REMOTE_DEVICE=/dev/input/event12
REMOTE_SOCKET=""
REMOTE_LIRCD_CONF=""
REMOTE_LIRCD_ARGS=""

#Chosen IR Transmitter
TRANSMITTER="None"
TRANSMITTER_MODULES=""
TRANSMITTER_DRIVER=""
TRANSMITTER_DEVICE=""
TRANSMITTER_SOCKET=""
TRANSMITTER_LIRCD_CONF=""
TRANSMITTER_LIRCD_ARGS=""

#Disable kernel support.
#Typically, lirc will disable in-kernel support for ir devices in order to
#handle them internally.  Set to false to prevent lirc from disabling this
#in-kernel support.
#DISABLE_KERNEL_SUPPORT="true"

#Enable lircd
START_LIRCD="false"

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD="false"

#Try to load appropriate kernel modules
LOAD_MODULES="true"

# Default configuration files for your hardware if any
LIRCMD_CONF=""

#Forcing noninteractive reconfiguration
#If lirc is to be reconfigured by an external application
#that doesn't have a debconf frontend available, the noninteractive
#frontend can be invoked and set to parse REMOTE and TRANSMITTER
#It will then populate all other variables without any user input
#If you would like to configure lirc via standard methods, be sure
#to leave this set to "false"
FORCE_NONINTERACTIVE_RECONFIGURATION="false"
START_LIRCMD=""

Ich könnte auch problemlos ohne inputlirc leben, allerdings hatte ich das Problem, dass lirc nach der Installation problemlos funktioniert hat nur leider nach einem Reboot nicht mehr?!?

Jetzt weiß ich nicht mehr weiter...

Hast Du vielleicht noch eine Idee??

Danke nochmals!

Beste Grüße

Thorsten

PS: Hardware ist eine ASRock BeeBox N3150 samt dazu gelieferter Fernbedienung.

Tom7320

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2007

Beiträge: 94

Noch ein Nachtrag: wenn ich nur lircd verwende (ohne inputlirc), lässt sich lircd nach einem Reboot nicht mehr starten:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
root@bee:~# /etc/init.d/lirc start
[ ok ] Starting lirc (via systemctl): lirc.service.
root@bee:~# systemctl status lirc
● lirc.service - LSB: Starts LIRC daemon.
   Loaded: loaded (/etc/init.d/lirc; bad; vendor preset: enabled)
   Active: active (exited) since Di 2016-07-12 20:56:31 CEST; 2min 33s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1321 ExecStop=/etc/init.d/lirc stop (code=exited, status=0/SUCCESS)
  Process: 1338 ExecStart=/etc/init.d/lirc start (code=exited, status=0/SUCCESS)
    Tasks: 0
   Memory: 0B
      CPU: 0

Jul 12 20:56:31 bee lirc[1338]:  * Starting remote control daemon(s) :
Jul 12 20:56:31 bee lirc[1338]: lircd: there seems to already be a lircd process with pid 1290
Jul 12 20:56:31 bee lirc[1338]: lircd: otherwise delete stale lockfile /var/run/lirc/lircd.pid
Jul 12 20:56:31 bee lirc[1338]:    ...fail!
Jul 12 20:56:31 bee lirc[1338]:  * Starting execution daemon: irexec
Jul 12 20:56:31 bee lirc[1338]:    ...fail!
Jul 12 20:56:31 bee systemd[1]: Started LSB: Starts LIRC daemon..
Jul 12 20:57:15 bee systemd[1]: Started LSB: Starts LIRC daemon..
Jul 12 20:58:32 bee systemd[1]: Started LSB: Starts LIRC daemon..
Jul 12 20:59:02 bee systemd[1]: Started LSB: Starts LIRC daemon..
root@bee:~# ps -A | grep lirc
root@bee:~# journalctl _PID=1321
-- Logs begin at Di 2016-07-12 20:56:23 CEST, end at Di 2016-07-12 21:00:27 CEST. --
Jul 12 20:56:31 bee lirc[1321]: sh: echo: I/O error
Jul 12 20:56:31 bee lirc[1321]:  * Stopping execution daemon: irexec
Jul 12 20:56:31 bee lirc[1321]:    ...done.
Jul 12 20:56:31 bee lirc[1321]:  * Stopping remote control daemon(s): LIRC
Jul 12 20:56:31 bee lirc[1321]:    ...done.
root@bee:~# journalctl _PID=1338
-- Logs begin at Di 2016-07-12 20:56:23 CEST, end at Di 2016-07-12 21:00:38 CEST. --
Jul 12 20:56:31 bee lirc[1338]:  * Loading LIRC modules
Jul 12 20:56:31 bee lirc[1338]:    ...done.
Jul 12 20:56:31 bee lirc[1338]:  * Starting remote control daemon(s) :
Jul 12 20:56:31 bee lirc[1338]: lircd: there seems to already be a lircd process with pid 1290
Jul 12 20:56:31 bee lirc[1338]: lircd: otherwise delete stale lockfile /var/run/lirc/lircd.pid
Jul 12 20:56:31 bee lirc[1338]:    ...fail!
Jul 12 20:56:31 bee lirc[1338]:  * Starting execution daemon: irexec
Jul 12 20:56:31 bee lirc[1338]:    ...fail!
root@bee:~#

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Also hast du einen CIR-Empfänger, willst von dem dafür angelegten Kernel Input Device mit inputlirc die Tastendrücke auslesen und dann irexec an den Socket von inputlirc hängen.

Die Änderung an der rc.local ist überflüssig, wenn nicht sogar schädlich - denn seit 2009 sind einige Jahre ins Land gegangen und inputlirc legt seinen Socket selber unter /var/run/lirc/lircd an (Quellcode, Zeile 65 der inputlircd.c), wie man es auch aufgrund der /etc/init.d/inputlirc vermuten könnte:

1
2
3
4
5
6
7
8
case "$1" in
  start)
    mkdir -p /var/run/lirc
    echo "Starting $DESC"
    start-stop-daemon --exec $DAEMON --start -- $OPTIONS $EVENTS
    # retain compatibility with old clients
    [ -S /var/run/lirc/lircd ] && ln -sf /var/run/lirc/lircd /dev/lircd
  ;;
Jul 12 20:21:01 bee irexec[702]: irexec: could not connect to socket

Läuft denn inputlirc?

systemctl status inputlirc

Kann der seinen Socket ungestört unter /var/run/lirc/lircd anlegen oder wird das eventuell durch den Symlink, der in der rc.local angelegt wurde, verhindert (was für lircd vermutlich das gleiche Problem verursacht)?

Tom7320

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2007

Beiträge: 94

rc.local ist wieder leer. inputlirc ist deinstalliert. Einzig und alleine das original lirc Paket 0.9.0 ist installiert. Nach der Installation funktioniert alles wie gewünscht. Nach einem Reboot nicht mehr:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
root@bee:~# systemctl status inputlirc
● inputlirc.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
root@bee:~# systemctl status irexec
● irexec.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
root@bee:~# systemctl status lirc
● lirc.service - LSB: Starts LIRC daemon.
   Loaded: loaded (/etc/init.d/lirc; bad; vendor preset: enabled)
   Active: active (exited) since Di 2016-07-12 21:13:58 CEST; 9min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1341 ExecStop=/etc/init.d/lirc stop (code=exited, status=0/SUCCESS)
  Process: 1357 ExecStart=/etc/init.d/lirc start (code=exited, status=0/SUCCESS)
    Tasks: 0
   Memory: 0B
      CPU: 0

Jul 12 21:13:58 bee systemd[1]: Starting LSB: Starts LIRC daemon....
Jul 12 21:13:58 bee lirc[1357]:  * Loading LIRC modules
Jul 12 21:13:58 bee lirc[1357]:    ...done.
Jul 12 21:13:58 bee lirc[1357]:  * Starting remote control daemon(s) :
Jul 12 21:13:58 bee lirc[1357]: lircd: there seems to already be a lircd process with pid 1302
Jul 12 21:13:58 bee lirc[1357]: lircd: otherwise delete stale lockfile /var/run/lirc/lircd.pid
Jul 12 21:13:58 bee lirc[1357]:    ...fail!
Jul 12 21:13:58 bee lirc[1357]:  * Starting execution daemon: irexec
Jul 12 21:13:58 bee lirc[1357]:    ...done.
Jul 12 21:13:58 bee systemd[1]: Started LSB: Starts LIRC daemon..
root@bee:~# ps -A | grep lirc
root@bee:~# ps -A | grep irexec
root@bee:~#

Was bedeutet die Fehlermeldung "there seems to already be a lircd process...". Offensichtlich stimmt das aber nicht?!

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Da scheint es aber noch Reste zu geben:

Jul 12 21:13:58 bee lirc[1357]: lircd: there seems to already be a lircd process with pid 1302
Jul 12 21:13:58 bee lirc[1357]: lircd: otherwise delete stale lockfile /var/run/lirc/lircd.pid
Jul 12 21:13:58 bee lirc[1357]:    ...fail!

Tom7320

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2007

Beiträge: 94

Jo. Nur warum und woher direkt nach dem Booten? BTW verändert sich in der hardware.conf das REMOTE_DEVICE wie von Geisterhand?! Das kann doch nicht sooooo schwer sein, aber ich verstehe es noch immer nicht. Will aber nicht kurz vor dem Ziel aufgeben...

Tom7320

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2007

Beiträge: 94

Nichts verändert, nur noch einmal gebootet. Jetzt läuft der Daemon plötzlich aber irw zeigt keine Tastendrücke an:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
root@bee:~# service status lirc
status: unrecognized service
root@bee:~# systemctl status lirc
● lirc.service - LSB: Starts LIRC daemon.
   Loaded: loaded (/etc/init.d/lirc; bad; vendor preset: enabled)
   Active: active (running) since Di 2016-07-12 21:30:55 CEST; 2min 14s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1233 ExecStop=/etc/init.d/lirc stop (code=exited, status=0/SUCCESS)
  Process: 1273 ExecStart=/etc/init.d/lirc start (code=exited, status=0/SUCCESS)
    Tasks: 2
   Memory: 2.9M
      CPU: 68ms
   CGroup: /system.slice/lirc.service
           ├─1334 /usr/sbin/lircd --output=/run/lirc/lircd --driver=devinput --device=/dev/input/event12
           └─1339 /usr/bin/irexec -d /etc/lirc/lircrc

Jul 12 21:30:55 bee lirc[1273]:  * Loading LIRC modules
Jul 12 21:30:55 bee lirc[1273]:    ...done.
Jul 12 21:30:55 bee lirc[1273]:  * Starting remote control daemon(s) :
Jul 12 21:30:55 bee lircd-0.9.0[1334]: lircd(devinput) ready, using /run/lirc/lircd
Jul 12 21:30:55 bee lirc[1273]:    ...done.
Jul 12 21:30:55 bee lirc[1273]:  * Starting execution daemon: irexec
Jul 12 21:30:55 bee lircd-0.9.0[1334]: accepted new client on /run/lirc/lircd
Jul 12 21:30:55 bee lircd-0.9.0[1334]: initializing '/dev/input/event12'
Jul 12 21:30:55 bee lirc[1273]:    ...done.
Jul 12 21:30:55 bee systemd[1]: Started LSB: Starts LIRC daemon..
root@bee:~# ps -A | grep lirc
 1334 ?        00:00:00 lircd
root@bee:~# ps -A | grep irexec
 1339 ?        00:00:00 irexec
root@bee:~# irw
^C
root@bee:~#

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Zeig mal wie der Empfänger aktuell konfiguriert ist:

sudo apt-get install ir-keytable
sudo ir-keytable

Tom7320

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2007

Beiträge: 94

1
2
3
4
5
6
7
8
root@bee:~# ir-keytable
Found /sys/class/rc/rc0/ (/dev/input/event6) with:
        Driver nuvoton-cir, table rc-rc6-mce
        Supported protocols: unknown other lirc rc-5 jvc sony nec sanyo mce-kbd rc-6 sharp xmp
        Enabled protocols: lirc
        Name: Nuvoton w836x7hg Infrared Remote
        bus: 25, vendor/product: 1050:00c9, version: 0x0013
        Repeat delay = 500 ms, repeat period = 125 ms

Tom7320

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2007

Beiträge: 94

Ich würde das Thema gerne noch einmal "pushen" wollen, da ich nach vielen Stunden dennoch noch nicht weiter gekommen bin... 🙄 Gibt es ein Paket der lirc Version 0.9.4 für Ubuntu Server 16.04? Würde es Sinn machen diese zu verwenden? Oder welche Optionen habe ich noch?

Danke für's Lesen und Helfen!

Thorsten

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Mh, den devinput Treiber für lirc habe ich noch nie wirklich genutzt - ich arbeite an einer VDR-Distribution (yaVDR) mit und da nutzen wir eventlircd, um von Kernel Input Devices zu lesen und hatten bislang eigene Upstart-Skripte gepflegt, um lirc und irexec zu starten... Wenn bei irw nichts kommt, würde ich als erstes mal nachsehen, ob man mit

sudo ir-keytable -t

Tastendrücke sehen kann (ggf. muss man lircd vorab stoppen, damit das klappt) und ob die lircd.conf die Tastennamen abbildet.

Der neue Maintainer von lirc arbeitet daran die neue Version in die Debian-Paketquellen zu bekommen: https://mentors.debian.net/package/lirc Das Bauen der Lirc-Pakete für Ubuntu 16.04 mit diesen Quellpaketen funktioniert schon mal, das habe ich in diesem PPA ausprobiert: https://launchpad.net/~yavdr/+archive/ubuntu/unstable-main/+packages?field.name_filter=lirc&field.status_filter=published&field.series_filter=xenial - aber ich bin noch nicht dazu gekommen das auf einem Testsystem auszuprobieren.

Tom7320

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2007

Beiträge: 94

Das witzige ist ja, dass es direkt nach der Installation perfekt funktioniert! Nur nach einem Reboot eben nicht mehr?! Daher schlussfolgerte ich unglaublich messerscharf, dass das Problem bei Systemstart liegen müsse. 🙄

Ich kann leider erst morgen Abend wieder rumfrickeln, da ich bis dahin arbeiten muss. 😐

Cool! Ein .deb der 0.9.4, das ich einfach installieren kann, wäre ein Versuch wert...

Schönen Abend!

Thorsten

Tom7320

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2007

Beiträge: 94

Moin!

Jetzt konnte ich testen. ir-keytable -t gibt nichts aus. irw auch nicht. Wenn ich einfach (wie unter Windows... 😛 ) das Paket lirc deinstalliere und neu installiere funktioniert es. Bis zum nächsten reboot.....

Schönen Tag allerseits!

Grüße

Thorsten

Antworten |