Bekomme LIRC unter openSUSE 13.1 64 Bit nicht zum laufen

Hallo,

wenn ich die folgenden Befehle manuell über die Konsole eingebe, funktioniert LIRC (Fernbedienung)


modprobe lirc_serial
/usr/bin/setserial /dev/ttyS0 uart none    # habe ich in /etc/init.d/boot.local" eingetragen
/usr/sbin/lircd -d /dev/lirc0

LIRC wurde bei der Installation installiert.

Wenn ich aber LIRC über ein Script starte, funktioniert LIRC nicht.


/etc/lirc/hardware.conf
/etc/lirc/lircd.conf
/etc/init.d/lirc        # Start-Script
/etc/sysconfig/lirc

/etc/lirc/hardware.conf


# /etc/lirc/hardware.conf
# 
#Chosen Remote Control

REMOTE="Home-brew (16x50 UART compatible serial port)"
REMOTE_MODULES="lirc_dev lirc_serial"
REMOTE_DRIVER=""
REMOTE_DEVICE="/dev/lirc0"
REMOTE_LIRCD_CONF="/etc/lirc/lircd.conf"
REMOTE_LIRCD_ARGS=""

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

#Enable lircd
START_LIRCD="true"

#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=""

/etc/init.d/lirc


#! /bin/sh
# Copyright (c) 1995-2002 SuSE Linux AG, Nuernberg, Germany.
# All rights reserved.
#
# Author: Kurt Garloff <feedback@suse.de>
# Author: Ludwig Nussel <feedback@suse.de>
#
# /etc/init.d/lirc
#   and its symbolic link
# /usr/sbin/rclirc
#
# LSB compatible service control script; see http://www.linuxbase.org/spec/
# 
### BEGIN INIT INFO
# Provides:          lirc
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Short-Description: lirc daemon
# Description:       The  main  task  of lircd is to decode the infrared
#    signals and provide an uniform interface for client applications
### END INIT INFO

# Check for missing binaries (stale symlinks should not happen)
lircd_BIN=/usr/sbin/lircd
test -x $lircd_BIN || exit 5

# Check for existence of needed config file and read it
lircd_CONFIG=/etc/sysconfig/lirc
test -r $lircd_CONFIG || exit 6
. $lircd_CONFIG

lircd_CONF=/etc/lirc/lircd.conf
lircd_PID=/var/run/lirc/lircd.pid

. /etc/rc.status

rc_reset

setdefaults()
{
    # set LIRCD_DEVICE default if unset
    for retries in 1 2; do
        if test "$LIRCD_DEVICE" != ""; then
            break;
        fi
        if test -L "/dev/input/ir"; then
        # have input driver
        LIRCD_DEVICE="/dev/input/ir"
        elif grep -q BaseRemoteCtl /proc/devices &&  -e /dev/lirc0 -o -e /dev/lirc ]; then
        # have lirc driver
        if  -e /dev/lirc0 ]; then
        LIRCD_DEVICE="/dev/lirc0"
        else
        LIRCD_DEVICE="/dev/lirc"
        fi
        else
        # wait for udev and try again
        udevadm settle
        fi
    done

    # set LIRCD_DRIVER default if unset
    if test "$LIRCD_DRIVER" = "" -a "$LIRCD_DEVICE" = "/dev/input/ir"; then
    LIRCD_DRIVER="dev/input"
    fi
}

case "$1" in
    start)
    echo -n "Starting lircd "
    modinfo evdev > /dev/null 2>&1 && modprobe evdev || :
    if test "$LIRC_MODULE" != ""; then
        modprobe "$LIRC_MODULE"
    fi
    setdefaults
    if  -z "$LIRCD_DRIVER" -a -z "$LIRCD_DEVICE" -a ! -e /dev/lirc ]; then
        echo -n "Error: no device found"
        rc_failed 6
        rc_status -v
        rc_exit
    fi
    if  ! -e "$lircd_CONF" ]; then
        DEVINPUTCONF='/usr/share/lirc/remotes/devinput/lircd.conf.devinput'
        if  "$LIRCD_DEVICE" = "/dev/input/ir" -a -e "$LIRCD_DEVICE" -a -e "$DEVINPUTCONF" ]; then
            install -m 644 "$DEVINPUTCONF" "$lircd_CONF"
        else
            echo -n "Error: please create "$lircd_CONF""
            rc_failed 6
            rc_status -v
            rc_exit
        fi
    fi
     -n "$LIRCD_DEVICE" ] && echo -n "($LIRCD_DEVICE)"
    install -d -m 755 /var/run/lirc
    install -m "$LIRCD_DEV_PERMISSIONS" /dev/null /var/run/lirc/lircd
    chown "$LIRCD_DEV_OWNER" /var/run/lirc/lircd
    if  ! -L /dev/lircd ]; then
        rm -f /dev/lircd
        ln -s /var/run/lirc/lircd /dev/lircd 
    fi

    lircd_ARGS=()
     -n "$LIRCD_DRIVER" ]     && lircd_ARGS+=(-H "$LIRCD_DRIVER")
     -n "$LIRCD_DEVICE" ]     && lircd_ARGS+=(-d "$LIRCD_DEVICE")
     -n "$LIRCD_LISTENPORT" ] && lircd_ARGS+=(--listen="$LIRCD_LISTENPORT")
     -n "$LIRCD_CONNECT" ]    && lircd_ARGS+=(-c "$LIRCD_CONNECT")

    start_daemon -p $lircd_PID $lircd_BIN "${lircd_ARGS@]}"
    rc_status -v
    ;;
    stop)
    echo -n "Shutting down lircd "
    killproc -TERM -p $lircd_PID $lircd_BIN
    rc_status -v
    ;;
    try-restart)
    $0 status >/dev/null &&  $0 restart
    rc_status
    ;;
    restart)
    $0 stop
    $0 start
    rc_status
    ;;
    force-reload|reload)
    echo -n "Reload service lircd "
    killproc -HUP $lircd_BIN
    touch "$lircd_PID"
    rc_status -v
    ;;
    status)
    echo -n "Checking for service lircd "
    checkproc -p $lircd_PID $lircd_BIN
    rc_status -v
    ;;
    probe)
    if test "$lircd_CONFIG" -nt "$lircd_PID"; then
         echo reload
    elif test "$lircd_CONF" -nt "$lircd_PID"; then
         echo reload
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
    exit 1
    ;;
esac
rc_exit

/etc/sysconfig/lirc


# Path:           Hardware/Lirc
## Description:    lirc (infrared remote control) configuration
## ServiceRestart: lirc
## Type:           string
## Default:        "660"
#
# permissions for /dev/lircd
#
LIRCD_DEV_PERMISSIONS="660"

## Type:        string
## Default:     "root:video"
#
# owner and group for /dev/lircd
#
LIRCD_DEV_OWNER="root:video"

## Type:        string
## Default:     ""
#
# use given driver
#
LIRCD_DRIVER=""

## Type:        string
## Default:     ""
#
# read from given device
#
LIRCD_DEVICE="/dev/lirc0"
#LIRCD_DEVICE="/dev/input/event4"

## Type:        string(lirc_bt829,lirc_gpio,lirc_i2c,lirc_it87,lirc_parallel,lirc_sir,ir-kbd-i2c,ir-kbd-gpio)
## Default:     ""
#
# load given lirc driver module
#
LIRC_MODULE=""

## Type:        string
## Default:     ""
#
# listen for network connections on specified port.
# WARNING: don't use this on a machine with an internet
# connection as lircd is running as root!
# 
LIRCD_LISTENPORT=

## Type:        string
## Default:     ""
#
# connect lircd to specified host
#
LIRCD_CONNECT=

Das Problem scheint hier zu sein das Modul “lirc_serial” zum richtigen Zeitpunkt beim booten zu laden.
Denn erst wenn ich:


modprobe lirc_serial
/etc/init.d/lirc start

eingebe, werden die Signale der Fernbedienung erkannt.
Um das Modul “lirc_serial” beim booten zu laden, habe ich folgendes versucht:


/etc/syskonfig/kernel
MODULES_LOADED_ON_BOOT="lirc_serial" 

hat nicht geholfen.

Außerdem ist mir aufgefallen, das nach einem Neustart das Verzeichnis “/var/run/lirc” nicht mehr vorhanden war (gelöscht).

MfG

Juergen B.

Das solltest du nicht machen.
Lade das Modul über eine Datei in /etc/modprobe.d/, via /etc/sysconfig/kernel, oder über /etc/modules-load.d/.
War das nicht schon kürzlich Thema in einem anderen Thread?

Den lirc Daemon solltest du über das init script starten:
“systemctl enable lirc”, oder benutze YaST->System->Services Manager.

Außerdem ist mir aufgefallen, das nach einem Neustart das Verzeichnis “/var/run/lirc” nicht mehr vorhanden war (gelöscht).

Vermutlich weil lirc nicht gestartet wurde.

Hallo,

also da scheint “wolfi323” etwas missverstanden zu haben.
Denn ich habe doch versucht zu sagen wenn ich die entsprechenden Befehle manuell über die Konsole eingabe, funktioniert “LIRC”.
Wenn ich das ganze jedoch automatisch beim “booten” mache, funktioniert “LIRC” nicht.
Ich habe doch


/etc/sysconfig/kernel

zum laden des Modules “lirc_serial” verwendet.
und das Start-Script “lirc” in


/etc/init.d (aktiviert mit "insserv -d /etc/init.d/lirc und über "yast"

Außerdem habe ich den Befehl:


/usr/sbin/setserial /dev/ttyS0 uart none
in
/etc/init.d/boot.local
eingetragen

Es funktioniert aber nur über die manuelle Eingabe,

MfG

Juergen B.

Ok, stimmt.
Der Kommentar dass du das zur /etc/init.d/boot.local hinzugefügt hast hat mich scheinbar etwas verwirrt.
Sorry!

Was sagt denn “systemctl status lirc” wenn es beim Boot nicht korrekt gestartet wird?

Vielleicht würde ja helfen, LIRC_MODULE in /etc/sysconfig/lirc auf “lirc_serial” zu setzen? Vermutlich startet lirc nicht, weil “/dev/lirc0” nicht existiert.
Das init Script lädt nämlich automatisch das in LIRC_MODULE angegebene Kernel-Modul mit modprobe, sh. Zeile 74:

        if test "$LIRC_MODULE" != ""; then
                modprobe "$LIRC_MODULE"
        fi

Aus /etc/sysconfig/kernel solltest du es dann natürlich wieder rausnehmen…

LIRC startet einwandfrei hier beim Booten. Für die Fernbedienung meiner TV-Karte habe ich folgende Einstellungen eingetragen:
LIRCD_DRIVER=“devinput”
LIRCD_DEVICE=“/dev/input/ir”
LIRC_MODULE=“ir-kbd-i2c”

Mit einem Empfänger am seriellen Port hab ich jedoch keine Erfahrung.

Hallo,

so habe den letzten Hinweis von “wolfi323” durchgeführt:


LIRC_MODULE in /etc/sysconfig/lirc auf "lirc_serial" gesetzt
Aus "/etc/sysconfig/kernel" Modul "lirc_serial" herausgenommen 

System neu gestartet → LIRC funktioniert nicht

systemctl status lirc:


lirc.service - LSB: lirc daemon
   Loaded: loaded (/etc/init.d/lirc)
   Active: active (running) since Mo 2014-08-25 19:25:54 CEST; 9min ago
  Process: 557 ExecStart=/etc/init.d/lirc start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/lirc.service
           └─612 /usr/sbin/lircd -d /dev/lirc0

irw /dev/lirc0:


connect: Connection refused

ls /dev/lirc* -ld:


crwxrwxrwx 1 root root 250, 0 25. Aug 19:25 /dev/lirc0
lrwxrwxrwx 1 root root     19 25. Aug 19:25 /dev/lircd -> /var/run/lirc/lircd

MfG

Juergen B.

Aber lirc läuft scheinbar.

irw /dev/lirc0:

connect: Connection refused

Und das geht, wenn du wie von dir beschrieben folgendes manuell aufrufst?

modprobe lirc_serial
/usr/sbin/lircd -d /dev/lirc0
/usr/bin/setserial /dev/ttyS0 uart none    # habe ich in /etc/init.d/boot.local" eingetragen

Da das modprobe von /etc/init.d/lirc ausgeführt wird, und das den lircd ja exakt genauso gestartet hat (sh. systemctl output), kanns ja eigentlich nur an dem setserial liegen würde ich sagen.
Funktionierts, wenn du “setserial /dev/ttyS0 uart none” manuell aufrufst?

PS, nur zur Erklärung:

/var/run/lirc wurde nicht gelöscht.
/var/run ist nicht wirklich auf deiner Festplatte vorhanden. Es ist ein tmpfs, existiert also nur im RAM.
Daher ist der Inhalt nach einem Neustart weg.

Hallo,

LIRC funktioniert nur wenn ich nach dem Systemstart das Modul “lirc_serial” entlade (rmmod lirc_serial") und dann wieder lade (modprobe lirc_serial).
Wenn ich dann “/etc/init.d/lirc stop” eingebe, kann ich die Signale mit “mode2 -d /dev/lirc0” empfangen.
Nach “/etc/init.d/lirc start” funktioniert auch LIRC.

Das sieht für mich so aus ob das Modul “lirc_serial” anders geladen werden muss, aber warum bis jetzt war LIRC einfach zu installieren.

Funktionierts, wenn du “setserial /dev/ttyS0 uart none” manuell aufrufst?

Nein.

MfG

Juergen B.

Ok. Also nur lirc stoppen und starten hilft auch nicht, oder?

Funktionert das?

systemctl stop lirc
rmmod lirc_serial
systemctl start lirc

Das sieht für mich so aus ob das Modul “lirc_serial” anders geladen werden muss, aber warum bis jetzt war LIRC einfach zu installieren.

Wie anders?
modprobe ist modprobe würd ich sagen, oder nicht?
Wie schon geschrieben, führt /etc/init.d/lirc folgendes aus:

modprobe "$LIRC_MODULE"

Was soll daran falsch/anders sein als wenn du “modprobe lirc_serial” manuell aufrufst? :wink:

Vielleicht hast du das lirc_serial noch wo anders eingetragen? /etc/sysconfig/kernel->INITRD_MODULES z.B.
Könnte sein, dass lirc_serial schon in der initrd geladen wird und weil das zu früh ist nicht funktioniert. Wenn du’s später im Laufenden System entlädtst und neu lädtsts funktionierts dann.
Ist jetzt aber nur Spekulation.
Was sagt:

sudo lsinitrd /boot/initrd|grep lirc

Hallo,

so bin wieder dabei die Fernbedienung über LIRC seriell zum laufen zu bekommen.

Ausgabe von “lsinitrd /boot/initrd|grep lirc”


""

Ich kann machen was ich will es funktioniert nur wenn ich nach dem Neustart:


/etc/init.d/lirc stop
rmmod lirc_serial
/etc/init.d/lirc start

Wie kann ich diesen Ablauf in einem Startscript in “/home/juergen/.kde4/Autostart” eingeben?
D.h. die Kommandos als normaler User als “root” ausführen.

MfG

Juergen B.
:’(

Bau Dir eine Datei lirc.sh mit dem Inhalt:

#!/bin/bash

/etc/init.d/lirc stop
rmmod lirc_serial
/etc/init.d/lirc start

Lege diese Datei in /home/Benutzername/bin/ ab, mache sie ausführbar und füge in /etc/init.d/after.local ein:

sh /home/Benutzername/bin/lirc.sh

Benutzername natürlich mit Deinem Benutzername ersetzen.

Wenn /etc/init.d/after.local nicht geht, mal mit /etc/init.d/before.local oder /etc/init.d/boot.local

PS: /etc/init.d/lirc stop bzw. /etc/init.d/lirc start wird bei mir nach systemd umgeleitet:

/etc/init.d/lirc stop
redirecting to systemctl stop lirc.service
/etc/init.d/lirc start
redirecting to systemctl start lirc.service

Ok, also ists nicht in der initrd.
Wie gesagt, war nur Spekulation, sonst fällt mir aber leider auch nichts ein.

Wie kann ich diesen Ablauf in einem Startscript in “/home/juergen/.kde4/Autostart” eingeben?
D.h. die Kommandos als normaler User als “root” ausführen.

Eine Möglichkeit wäre, die Datei /etc/sudoers entsprechend zu ändern, dass du es mit “sudo” starten kannst ohne ein Passwort eingeben zu müssen.
Bearbeiten kannst du diese Datei mit “visudo”, eine Zeile wie diese sollte funktionieren:

username ALL=(ALL) NOPASSWD: scriptname_mit_pfad

Du kannst auch wahlweise eine Datei in /etc/sudoers.d/ mit diesem Inhalt anlegen.

Bin da grade über folgenden Bug-Report gestolpert:
http://bugzilla.opensuse.org/show_bug.cgi?id=900421
Kurz zusammengefasst, der ModemManager wird automatisch beim Booten gestartet und scannt nach Modems, auch auf der seriellen Schnittstelle. Er verändert dabei die Einstellungen der Schnittstelle, was dann Probleme mit anderer Software, die die Schnittstelle verwendet, verursachen kann.

Könnte ja sein, dass auch bei dir der ModemManager die Ursache des Problems ist, es geht ja um die serielle Schnittstelle.
Also probier mal ihn zu deaktivieren:

sudo systemctl disable ModemManager.service

Allerdings funktionieren dann z.B. Internetsticks nicht mehr. (WLAN oder Kabel-Ethernet aber schon)

Hallo,

so die Fernbedienung mit LIRC über die RS232-Schnittstelle funktioniert nun (mit dem letzten Beitrag von “Sauerland”)


Datei in: "/home/juergen/bin/lirc.sh"
Start in: "/etc/init.d/after.local (sh /home/juergen/bin/lirc.sh)"

Zu dem andernen Hinweis von Sauerland

PS: /etc/init.d/lirc stop bzw. /etc/init.d/lirc start wird bei mir nach systemd umgeleitet:
Code:
/etc/init.d/lirc stop
redirecting to systemctl stop lirc.service
Code:
/etc/init.d/lirc start
redirecting to systemctl start lirc.service

habe ich noch folgende Frage:
Müsste ich diese Befehle über die Kommandozeile eingeben ?

Der letzte Hinweis von Wolfi323:

Bin da grade über folgenden Bug-Report gestolpert:
http://bugzilla.opensuse.org/show_bug.cgi?id=900421
Kurz zusammengefasst, der ModemManager wird automatisch beim Booten gestartet und scannt nach Modems, auch auf der seriellen Schnittstelle. Er verändert dabei die Einstellungen der Schnittstelle, was dann Probleme mit anderer Software, die die Schnittstelle verwendet, verursachen kann.

Könnte ja sein, dass auch bei dir der ModemManager die Ursache des Problems ist, es geht ja um die serielle Schnittstelle.
Also probier mal ihn zu deaktivieren:
Code:
sudo systemctl disable ModemManager.service

Allerdings funktionieren dann z.B. Internetsticks nicht mehr. (WLAN oder Kabel-Ethernet aber schon)

hat nicht funktioniert, war aber naheliegend.

Vielen Dank für Eure hilfreichen Hinweise.
Habe mal wieder viel gelernt, vor allendingen: nicht aufgeben.

MfG

Juergen B.
lol!

Zu dem andernen Hinweis von Sauerland

[QUOTE]PS: /etc/init.d/lirc stop bzw. /etc/init.d/lirc start wird bei mir nach systemd umgeleitet:

/etc/init.d/lirc stop
redirecting to systemctl stop lirc.service
Code:
/etc/init.d/lirc start
redirecting to systemctl start lirc.service

habe ich noch folgende Frage:
Müsste ich diese Befehle über die Kommandozeile eingeben ?[/QUOTE]
War nur ein Hinweis, ich kann die Befehle in Deinem Script mit den entsprechenden systemd Befehlen ersetzen:
/etc/init.d/lirc stop = systemctl stop lirc.service
/etc/init.d/lirc start = systemctl start lirc.service

Wenn die beiden systemctl Befehle bei Dir auch funktionieren, würde ich die in das Script schreiben, da systemd jetzt die Zukunft ist.

Hallo,

so alles klar, Danke.

MfG

Juergen B.