diff --git a/packages/sysutils/lirc/package.mk b/packages/sysutils/lirc/package.mk
index 761c40bed1..6ee2fb5b5f 100644
--- a/packages/sysutils/lirc/package.mk
+++ b/packages/sysutils/lirc/package.mk
@@ -59,6 +59,7 @@ post_makeinstall_target() {
mkdir -p $INSTALL/usr/lib/libreelec
cp $PKG_DIR/scripts/lircd_helper $INSTALL/usr/lib/libreelec
+ cp $PKG_DIR/scripts/lircd_uinput_helper $INSTALL/usr/lib/libreelec
mkdir -p $INSTALL/usr/lib/udev
cp $PKG_DIR/scripts/lircd_wakeup_enable $INSTALL/usr/lib/udev
@@ -66,3 +67,9 @@ post_makeinstall_target() {
mkdir -p $INSTALL/usr/share/services
cp -P $PKG_DIR/default.d/*.conf $INSTALL/usr/share/services
}
+
+post_install() {
+ enable_service lircd.socket
+ enable_service lircd.service
+ enable_service lircd-uinput.service
+}
diff --git a/packages/sysutils/lirc/scripts/lircd_helper b/packages/sysutils/lirc/scripts/lircd_helper
index d36ce21e03..b65b85d250 100755
--- a/packages/sysutils/lirc/scripts/lircd_helper
+++ b/packages/sysutils/lirc/scripts/lircd_helper
@@ -1,61 +1,31 @@
#!/bin/sh
################################################################################
-# This file is part of OpenELEC - http://www.openelec.tv
-# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv)
+# This file is part of LibreELEC - https://libreelec.tv
+# Copyright (C) 2017 Matthias Reichl (hias@horus.com)
#
-# OpenELEC is free software: you can redistribute it and/or modify
+# LibreELEC is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
-# OpenELEC is distributed in the hope that it will be useful,
+# LibreELEC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with OpenELEC. If not, see .
+# along with LibreELEC. If not, see .
################################################################################
-DEVICE=$(echo "$1" | cut -f1 -d:)
-DRIVER=$(echo "$1" | cut -f2 -d:)
-CONFIG=$(echo "$1" | cut -f3 -d:)
-
-if [ "x$DRIVER" = "x" ]; then
- exit 1;
+if [ -e "/storage/.config/lirc_options.conf" ] ; then
+ LIRCD_OPTIONS="-O /storage/.config/lirc_options.conf"
fi
-mkdir -p '/run/lirc'
-
-LIRCD="/usr/sbin/lircd"
-LIRCD_UINPUT="/usr/sbin/lircd-uinput"
-LIRCD_CONFIG="--driver=$DRIVER --device=/dev/$DEVICE"
-LIRCD_CONFIG="$LIRCD_CONFIG --output=/run/lirc/lircd-$DEVICE"
-LIRCD_CONFIG="$LIRCD_CONFIG --pidfile=/run/lirc/lircd-$DEVICE.pid"
-LIRCD_CONFIG="$LIRCD_CONFIG --release=_LIRCUP"
-
-if [ -e "/storage/.config/lircd.conf" ]; then
- LIRCD_CONFIG="$LIRCD_CONFIG /storage/.config/lircd.conf"
-elif [ -n "$CONFIG" ]; then
- if [ -e "/storage/.config/$CONFIG" ]; then
- LIRCD_CONFIG="$LIRCD_CONFIG /storage/.config/$CONFIG"
- elif [ -e "/etc/lirc/$CONFIG" ]; then
- LIRCD_CONFIG="$LIRCD_CONFIG /etc/lirc/$CONFIG"
- else
- echo "No device specific $CONFIG file found"
- echo "You need to provide your own $CONFIG file"
- echo "Place it in /storage/.config/$CONFIG"
- exit 0
- fi
+if [ -e "/storage/.config/lircd.conf" ] ; then
+ LIRCD_CONF="/storage/.config/lircd.conf"
else
- echo "No lircd.conf file found"
- echo "You need to provide your own lircd.conf file"
- echo "Place it in /storage/.config/lircd.conf"
- exit 0
+ LIRCD_CONF="/etc/lirc/lircd.conf"
fi
-# lircd daemonizes but lircd-uinput doesn't so we need to fork it to the background
-$LIRCD $LIRCD_CONFIG
-$LIRCD_UINPUT --release=_LIRCUP /run/lirc/lircd-$DEVICE &
-exit 0
+exec /usr/sbin/lircd $LIRCD_OPTIONS "$@" $LIRCD_CONF
diff --git a/packages/sysutils/lirc/scripts/lircd_uinput_helper b/packages/sysutils/lirc/scripts/lircd_uinput_helper
new file mode 100755
index 0000000000..dde6ce154b
--- /dev/null
+++ b/packages/sysutils/lirc/scripts/lircd_uinput_helper
@@ -0,0 +1,24 @@
+#!/bin/sh
+################################################################################
+# This file is part of LibreELEC - https://libreelec.tv
+# Copyright (C) 2017 Matthias Reichl (hias@horus.com)
+#
+# LibreELEC is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# LibreELEC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LibreELEC. If not, see .
+################################################################################
+
+if [ -e "/storage/.config/lirc_options.conf" ] ; then
+ LIRCD_OPTIONS="-O /storage/.config/lirc_options.conf"
+fi
+
+exec /usr/sbin/lircd-uinput $LIRCD_OPTIONS "$@"
diff --git a/packages/sysutils/lirc/system.d/lircd-defaults.service b/packages/sysutils/lirc/system.d/lircd-defaults.service
deleted file mode 100644
index 31b77757ec..0000000000
--- a/packages/sysutils/lirc/system.d/lircd-defaults.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=Lirc defaults
-After=local-fs.target
-
-ConditionPathExists=!/storage/.cache/services/lircd.conf
-ConditionPathExists=!/storage/.cache/services/lircd.disabled
-
-[Service]
-Type=oneshot
-ExecStart=/bin/sh -c 'cp /usr/share/services/lircd.conf /storage/.cache/services/'
-RemainAfterExit=yes
diff --git a/packages/sysutils/lirc/system.d/lircd-uinput.service b/packages/sysutils/lirc/system.d/lircd-uinput.service
new file mode 100644
index 0000000000..9728f55f4e
--- /dev/null
+++ b/packages/sysutils/lirc/system.d/lircd-uinput.service
@@ -0,0 +1,12 @@
+[Unit]
+Documentation=http://lirc.org/html/configure.html
+Description=Forward LIRC button presses as uinput events
+ConditionPathExists=/storage/.cache/services/lircd.conf
+After=lircd.service
+
+[Service]
+Type=simple
+ExecStart=/usr/lib/libreelec/lircd_uinput_helper
+
+[Install]
+WantedBy=multi-user.target
diff --git a/packages/sysutils/lirc/system.d/lircd.service b/packages/sysutils/lirc/system.d/lircd.service
new file mode 100644
index 0000000000..092c0b9be2
--- /dev/null
+++ b/packages/sysutils/lirc/system.d/lircd.service
@@ -0,0 +1,12 @@
+[Unit]
+Documentation=http://lirc.org/html/configure.html
+Description=Flexible IR remote input/output application support
+ConditionPathExists=/storage/.cache/services/lircd.conf
+After=network.target
+
+[Service]
+Type=simple
+ExecStart=/usr/lib/libreelec/lircd_helper --nodaemon --release
+
+[Install]
+WantedBy=multi-user.target
diff --git a/packages/sysutils/lirc/system.d/lircd.socket b/packages/sysutils/lirc/system.d/lircd.socket
new file mode 100644
index 0000000000..03a5c1bd5b
--- /dev/null
+++ b/packages/sysutils/lirc/system.d/lircd.socket
@@ -0,0 +1,6 @@
+[Socket]
+ListenStream=/run/lirc/lircd.socket
+
+[Install]
+WantedBy=sockets.target
+Also=lircd.service
diff --git a/packages/sysutils/lirc/system.d/lircd@.service b/packages/sysutils/lirc/system.d/lircd@.service
deleted file mode 100644
index c377ab528a..0000000000
--- a/packages/sysutils/lirc/system.d/lircd@.service
+++ /dev/null
@@ -1,16 +0,0 @@
-[Unit]
-Description=Lirc with %I
-After=lircd-defaults.service
-Requires=lircd-defaults.service
-
-ConditionPathExists=/storage/.cache/services/lircd.conf
-
-[Service]
-Type=forking
-ExecStart=/usr/lib/libreelec/lircd_helper %I
-TimeoutStopSec=1
-RemainAfterExit=yes
-
-[Install]
-WantedBy=multi-user.target
-
diff --git a/packages/sysutils/lirc/udev.d/98-lircd.rules b/packages/sysutils/lirc/udev.d/98-lircd.rules
deleted file mode 100644
index 7d3af8b8a9..0000000000
--- a/packages/sysutils/lirc/udev.d/98-lircd.rules
+++ /dev/null
@@ -1,74 +0,0 @@
-################################################################################
-# An example udev rules file for lircd.
-################################################################################
-
-# lircd_helper only does something for "add" and "remove" actions.
-ACTION!="add|remove", GOTO="end"
-
-KERNEL=="hiddev[0-9]*", SUBSYSTEM=="usb", SUBSYSTEMS=="usb", GOTO="begin"
-KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", GOTO="begin"
-KERNEL=="lirc[0-9]*", SUBSYSTEM=="lirc", SUBSYSTEMS=="i2c", GOTO="begin"
-KERNEL=="lirc[0-9]*", SUBSYSTEM=="lirc", SUBSYSTEMS=="usb", GOTO="begin"
-KERNEL=="lirc[0-9]*", SUBSYSTEM=="lirc", SUBSYSTEMS=="platform", GOTO="begin"
-KERNEL=="lirc[0-9]*", SUBSYSTEM=="lirc", SUBSYSTEMS=="pnp", GOTO="begin"
-KERNEL=="lirc[0-9]*", SUBSYSTEM=="lirc", SUBSYSTEMS=="rc", GOTO="begin"
-GOTO="end"
-LABEL="begin"
-
-#-------------------------------------------------------------------------------
-# Ask lircd_helper to lirc devices.
-#-------------------------------------------------------------------------------
-
-SUBSYSTEM=="lirc", \
- ENV{lircd_driver}="default", \
- ENV{lircd_conf}="lircd.conf"
-
-### Microsoft Xbox DVD dongle
-SUBSYSTEM=="lirc", DRIVERS=="lirc_xbox", \
- ENV{lircd_driver}="default", \
- ENV{lircd_conf}="lircd.conf.xbox"
-
-### RPi GPIO IR Receiver
-SUBSYSTEM=="lirc", DRIVERS=="lirc_rpi", \
- ENV{lircd_driver}="default", \
- ENV{lircd_conf}="lircd.conf.rpi"
-
-### Odroid AMLogic IR Receiver
-SUBSYSTEMS=="platform", DRIVERS=="meson-ir", \
- ENV{lircd_driver}="default", \
- ENV{lircd_conf}="lircd.conf.amremote"
-
-#-------------------------------------------------------------------------------
-# Ask lircd_helper to handle USB devices that do not show up as lirc devices
-# and are supported by lircd. Remote controls that are USB HID devices that show
-# up as event devices are not included as as they are handled by eventlircd.
-#-------------------------------------------------------------------------------
-SUBSYSTEMS=="usb", GOTO="begin-usb"
-GOTO="end-usb"
-
-LABEL="begin-usb"
-
-ENV{ID_USB_INTERFACES}=="", IMPORT{builtin}="usb_id"
-
-ENV{ID_VENDOR_ID}=="04d8", ENV{ID_MODEL_ID}=="fd08", \
- ENV{lircd_driver}="usb_irtoy", \
- ENV{lircd_conf}="lircd.conf"
-
-ENV{ID_VENDOR_ID}=="0fe9", ENV{ID_MODEL_ID}=="9010", \
- ENV{lircd_driver}="dvico", \
- ENV{lircd_conf}="lircd.conf"
-
-ENV{ID_VENDOR_ID}=="04d8", ENV{ID_MODEL_ID}=="f844", \
- ENV{lircd_driver}="irman", \
- ENV{lircd_conf}="lircd.conf"
-
-LABEL="end-usb"
-
-ENV{lircd_driver}=="?*", ENV{lircd_conf}=="?*", ACTION=="add", \
- TAG+="systemd", ENV{SYSTEMD_WANTS}+="lircd@$name:$env{lircd_driver}:$env{lircd_conf}.service", \
- RUN+="lircd_wakeup_enable"
-
-ENV{lircd_driver}=="?*", ENV{lircd_conf}=="?*", ACTION=="remove", \
- RUN+="/usr/bin/systemctl stop lircd@$name:$env{lircd_driver}:$env{lircd_conf}.service"
-
-LABEL="end"