Stundenlang wieder kein Erfolg :-(
Habe einen seriellen IR-Emfänger der am COM Port hängt und möchte eine beliebige Fernbedienung damit verwenden.
Habe es mit 6 Fernbedienungen probiert, nur eine gibt ein Enter zurück - ist nur die falsche Fernbedienung.
Ich dachte irw zeigt Raw codes an.

So wie ichs gelesen habe, soll man dafür das Kernelmodul 'lirc_serial' verwenden. Aber das gibt es nicht in Arch Kernel.

Weiß jemand ob es dafür Ersatz gibt, oder wurde der einfach mal so vergessen?

Oder verstehe ich das Lirc einfach nur falsch...
Aha..das Kernelmodul 'lirc_serial' wurde durch 'serial_ir' ersetzt...hmm
Danke, ein wenig kam ich weiter.

In /etc/lirc/lirc/options.conf habe ich nun das eingetragen.
...
driver = devinput
device = /dev/input/event12
[modinit]
code =/usr/bin/setserial /dev/ttyS0 uart none; /usr/bin/modprobe serial_ir
...
Damit bekomme ich mit mode2 immerhin etwas zurück - blöderweise auf die Fernbedienung die ich nicht nutzen möchte.
Immerhin weiß ich jetzt, dass der Empfänger nicht kaputt ist.
Naja, ein C-Programm will ich nicht unbedingt schreiben müssen, kenne mich mit C nicht wirklich aus.
Aber ich kann sagen, dass ich einen Schritt weiter kam:

Die Fernbedienung, die ich habe stammt von einem Sony Blu-ray Player. Ich weiß nicht mehr wo ichs gefunden habe, aber nach dem ich 'echo sony > /sys/class/rc/rc0/protocols ausgeführt habe, kann ich Sie mit irrecord einlesen.
Als driver verwende ich immer noch 'devinput'.
Jetzt stehe ich vor einem neuen Problem:
Mit 'irrecord' werden die Tastencodes mit 8bit statt 12bit eingelesen (Die anderen Sonys in der Lirc Datenbank sind entweder 12, 15 oder 20bit.)
Und wenn ich 'irrecord --force' ausführe, bekomme ich beim eingeben einer Taste einen "Speicherabzug" Fehler.

Ich probiere mal weiter rum :-)
Juhu, mittlerweile habe ich eine halbwegs funktionierende lirc.conf. Aber ein Problem hab ich noch nicht herausgefunden:

Immer wenn ich eine Taste drücke, wird zuerst der Tastencode der zuvor getätigten Taste genommen.

Zu sehen ist die Ausgabe von mode2 beim drücken einer Taste.
Der Tastencode steht in 3. Zeile hinten: '18e21a', aber es wird der code von der 1. Zeile verwendet.
Bisher weiß ich nicht was man eintragen muss, um die ersten beiden Zeilen zu überspringen.
code: 0xecfaf05800000000bafb0100000000000400040015e21a00
code: 0xecfaf05800000000bafb0100000000000000000000000000
code: 0xecfaf058000000002dac0200000000000400040018e21a00
code: 0xecfaf058000000002dac0200000000000000000000000000
code: 0xecfaf05800000000345c0300000000000400040018e21a00
code: 0xecfaf05800000000345c0300000000000000000000000000
Sowas ist echt frustrierend. Ich hab es mit anderen Fernbedienungen probiert, und alle hatten das gleiche Problem.
Irgendwas mach ich falsch. Ich weiß nur nicht was.

Die Doku unter http://www.lirc.org/html/lircd.conf.html hilft wenig. Weiß jemand wie man das erste Event ignorieren/überspringen kann?
Herrjeh, da hat sich ja jedemenge getan.
Meine oben angegebenen Links taugen ja nichts mehr. Sogar in lirc.org stimmen die Dokus nicht.
Ich habe auch den selbstgemachten serial Empfänger. Der hat auch früher sehr gut funktioniert.
Serialempfänger home-brew mit dem TSOP1738 hier:
http://www.lirc.org/receivers.html Alles eingebaut in ein sub-D 9pol Gehäuse.
Ein irrecord ergibt bei Tastendruck nur ein 0x0.
Naja, ich werde dran bleiben. Natürlich werde ich dann berichten.
Gruß aus DN
Greg
Hehe, schön zu hören, dass auch jemand sich damit rumplagt.
Ich hab jetzt folgendes ausprobiert, nachdem ich http://www.yavdr.org/documentation/de/ch02s03.html gelesen habe.

Die erstellte lirc.conf hab ich gelöst und alles rückgängig gemacht.
Und in /etc/lirc/lirc_options.conf unter device das device = /dev/input/by-path/platform-serial_ir.0-event-ir eingetragen.

1. Eine unter /etc/rc_keymaps/ eine neue Datei für meine Sony Fernbedienung erstellt anhand der Anleitung erstellt.
2. In /etc/rc_maps.cfg die neue Map hinzugefügt: * serial_ir mysony /etc/rc_keymaps/sony
3. Mit ir-keytable -c -p sony -w /etc/rc_keymaps/sony die neue Datei eingelesen.
4. Mit ir-keytable -t kann man nun die Tasten testen. Die Namen der Tasten stehen dann da.
5. Wenn man nun lirc laufen lässt, erhält man die gleichen Tasten mit irw.

Aber:
Mein Grundproblem hat sich nicht gelöst. So sieht z.B. die irw ausgabe aus:
# irw
(Taste 1 drücken)
0000000080010002 00 KEY_1 devinput-32
(Taste 2 drücken)
0000000080010002 00 KEY_1 devinput-32
0000000080010003 00 KEY_2 devinput-32
(Taste POWER drücken)
0000000080010003 00 KEY_2 devinput-32
0000000080010074 00 KEY_POWER devinput-32
...
Also immer wenn ich eine Taste drücke, kommt zuerst nochmal der Code der vorherigen Taste.

Ich habe 2 serielle Empfänger ausprobiert. Einen selbstgebauten mit TSOP31238 und einen den ich im Schrank gefunden habe. Problem besteht bei beiden.
Entweder sind beide Empfänger defekt, oder vielleicht stimmt ja doch was nicht was mit dem Kernelmodul serial_ir.
Ich bin jetzt ein bisschen weiter gekommen.
Jetzt der Reihe nach:
Installation von lirc.
Aufbau des Empfängers für RS232 an ttyS0 nach diesem Dokus:
(Liegt alles lokal auf dem /usr/share/doc/lirc/)
file:///usr/share/doc/lirc/lirc.org/receivers.html
Da meine Fernbedienung von einem Strong DVB-T Receivers nicht in der Datenbank vorliegt, habe ich eine eigene conf erstellen müssen.
Das geht wie folgt:
setserial /dev/ttyS0 uart none
modprobe serial_ir
Es wird vom Kernel ein Device erzeugt /dev/lirc0
irrecord -n -d /dev/lirc0 strong.lircd.conf
irrecord ist Selbsterklärend. Es muss zunächst ein Name eingegeben werden und danach möglichst viele verschiedene Tasten >1 sek. aber < 10sek betätigt werden. Danach kann dann jeder einzelnen Taste ein Code ausgelesen werden. Zu guter Letzt wird nach einen Togglebit gesucht, dabei muß dann eine Taste mehreremale betätigt werden.
Es kam zunächst nur als Code 0x0 an allen Tasten heraus. Das lag aber daran, dass neben den LIRC-Empfänger ein Schnurlostelefon stand. Das stört den Empfänger so stark, dass im journalctl einige Fehlermeldungen auftauchten.
kernel: serial_ir serial_ir.0: ignoring spike: 1 1 8395447015440ns 8395257183839ns
Eine Abschirmung durch einen simplen Topfdeckel aus Edelstahl hat das Problem beseitigt. Besser wäre natürlich den Empfänger in ein Metallgehäuse aufzubauen. Oder noch besser die Störquelle beseitigen.
Mit dem erneuten irrecord Start konnte dann eine normale strong.lircd.conf Datei erzeugt werden.
Diese ins Verzeichnis /etc/lirc/lircd.conf.d/ kopieren.
In /etc/lirc/lircd.conf.d/ ändern, hinzufügen:
Datei devinput.lircd.conf umbenennen in devinput.lircd.dist
/etc/lirc/lirc_options.conf geändert:
driver = default
device = auto
Kommentator vor [modinit] entfernt.
Zeile hinzugefügt unter [modinit]
code = setserial /dev/ttyS0 uart none; modprobe serial_ir
Rechner neustart
systemctl start lirc
Im journalctl sollte jetzt drinstehen:
...
lircd-0.9.4d[818]: Info: Initial device: /dev/lirc0
...
lircd[818]: lircd-0.9.4d[818]: Info: Using remote: strong.
...
lircd-0.9.4d[818]: Notice: lircd(default) ready, using /var/run/lirc/lircd

Wenn ich jetzt als Root mode2 eingebe, und eine Taste auf der Fernbedienung drücke, dann kommt folgendes raus:
# systemctl start lircd
# mode2
Using driver default on device auto
Trying device: /dev/lirc0
Using device: /dev/lirc0
Warning: Running as root.
pulse 661
space 433268
pulse 9089
space 4415
pulse 603
space 519
Als Audioplayer benutze ich noch den alten xmms. Für diesen habe ich eine .lircrc gemacht. Aber xmms reagiert noch nicht. Da zickt noch was rum.
Da muß ich noch weiter rumbasteln. Vielleicht ein Rechte Problem.

Gruß aus DN
Greg
Heureka! Es funktioniert!! DANKE, DANKE, Danke Greg, mit deinem Post konnte ich endlich mein Problem lösen.

Ich hatte die ganze Zeit als driver "devinput" am laufen gehabt, weshalb die Tastencodes über den kernel decodiert wurden. Da konnte ich ja nur Blödsinn einlesen.

Es gibt somit 2 Lösungswege die Fernbedieung zum laufen zu bringen:
1. Über den Kernel mit devinput und ir-keytable, indem man eine keymap erstellt. Dabei hatte ich aber dass oben stehende Problem mit den ursprünglichen Tastencodes beim drücken einer Taste. Vielleicht wird das mit neuen Kernelversionen behoben.

2. Über Lirc mit driver "default". Da meine Fernbedienung von sony stammt, musste ich /sys/class/rc/rc0/protocols sony aktivieren, damit was ankommt.
Somit hier meine vollständige /etc/lirc/lirc_options.conf:
[lircd]
nodaemon        = False
driver          = default
device          = /dev/lirc0
output          = /var/run/lirc/lircd
pidfile         = /var/run/lirc/lircd.pid
plugindir       = /usr/lib/lirc/plugins
permission      = 666
allow-simulate  = No
repeat-max      = 200
#effective-user =
#listen         = [address:]port
#connect        = host[:port]
#loglevel       = 6
#uinput         = ...
#release        = ...
#logfile        = ...

[lircmd]
uinput          = False
nodaemon        = False

[modinit]
# Serial Port ausschalten, damit Kernel modul geladen werden kann
code = /usr/bin/setserial /dev/ttyS0 uart none
# Kernel modul serial_ir laden (hieß früher mal lirc_serial)
code1 = /usr/sbin/modprobe serial_ir
# Sony Protokol aktivieren. Je nach Fernbedieung was anderes eintragen
code2 = /usr/bin/echo sony > /sys/class/rc/rc0/protocols

# [lircd-uinput]
# release-timeout = 200
Damit konnte ich mit irrecord die Fernbedienung erfolgreich einlesen. Ich musste sogar zwei Dateien einlesen, da in der meiner Sony 2 Fernbedienungen in einer vereint sind (Tasten KEY_VOLUMEUP, KEY_VOLUME_DOWN, KEY_MUTE separat).
xafnir schriebHeureka! Es funktioniert!! DANKE, DANKE, Danke Greg, mit deinem Post konnte ich endlich mein Problem lösen...
Das ist gut zu wissen, dass es bei dir funktioniert.
Leider weiß ich noch nicht warum das bei mir noch bockt.
…..
.....
Jetzt habe ich mal eine alte Fernbedienung geholt die damals funktioniert hat.
Siehe da, es geht alles so wie es sein soll. XMMS und Audacious funktionieren.
Damit wäre das größte Problem gelöst.
Die Strong Fernbedienung wird einfach nicht genommen. So probiere ich noch Andere aus.

Bis denn..
Greg
So wie ich sehe, probierst dus mit einem Serial / COM-Port Empfänger. Probiere mal folgendes aus.
1. In der lirc_options:
[lircd]
driver          = default
device = /dev/lirc0
.... 
[modinit]
code = /usr/bin/setserial /dev/ttyS0 uart none
code1 = /usr/sbin/modprobe serial_ir
# später einkommentieren: code2 = /usr/bin/echo XYZ > /sys/class/rc/rc0/protocols
1. Nun entferne serial_ir mit modprobe -r serial_ir.
2. Lirc-Dienst neu starten mit systemctl restart lircd
3. In der Log Datei /var/log/messages sollte nun stehen, dass serial_ir erfolgreich geladen wurde.
4. Prüfen ob Lircd läuft systemctl status lircd
5. cat /sys/class/rc/rc0/protocols - sofern du nur ein Empfänger angeschlossen ist, sollte das da sein.
In dieser Datei kannst du nun nacheinander einen der Protokolle aktivieren: echo XYZ > /sys/class/rc/rc0/protocols und anschließend prüfen ob mit mode2 irgendwas ankommt, wenn du auf eine Taste drückst.
Wenn mit einem Protokoll XYZ dann was ankommt, kannst du die Fernbedienung mit irrecord einlesen. Parameter brauchst du keine anzugeben, da alles was verwendet wird,
in der /etc/lirc_options.conf steht.
Und wenns dann laufen sollte, kannst du die auskommentierte Zeile mit dem richtigen Protokol in /etc/lirc/lirc_options.conf eintragen.


Das wäre so die Vorgehensweise wenn du es über die lirc + irrecord die Fernbedienung einlesen willst.

Alternativ könnte es noch mit dem "devinput" Treiber + ir-keytable gehen, wo der Kernel das decodieren übernimmt - was bei mir ja quatsch zurückgegeben hat.
Mit "devinput" musst du die /etc/lirc/lircd.conf.d/devinput.lircd.conf verwenden. Dazu musst du eine /etc/rc_keymap/xyz anlegen und in /etc/rc_maps.cfg * serial_ir myremote /etc/rc_keymaps/myremote eintragen.
Wie man die Datei erstellt wird hier ganz gut erklärt: http://www.yavdr.org/documentation/de/ch02s03.html


Moment mal..von welchem Hersteller ist denn deine Fernbedienung. "Strong" sagt mir nicht viel.
xafnir schrieb...Moment mal..von welchem Hersteller ist denn deine Fernbedienung. "Strong" sagt mir nicht viel. ....So wie ich sehe, probierst dus mit einem Serial / COM-Port Empfänger...
Vielen Dank für deinen Lösungsweg!!!

Das ist ein DVB-T2 Receiver Strong SRT8540.
Von Strong habe ich allerdings vorher auch nichts gewußt. Den Receiver hatte ich ausgesucht weil der recht gute Testergebnisse hatte.
Der ist auch sehr gut.
https://www.amazon.de/Strong-SRT-8540-terrestrischer-Fernbedienung/dp/B01D3AVEJY Nein, den habe ich nicht von Amazon!

Was die Fernbedienung für ein Protokoll hat, weiß ich nicht.
Der Empfänger dürfte der gleiche sein, den du auch benutzt. Ein sogenannter home-brew Selbstbau Empfänger. http://www.lirc.org/receivers.html Schaltbild ist weiter unten. Sieht nicht ganz so häftig aus wie diese: http://www.lirc.org/pictures1.html
Was ich mal bisher noch gemacht habe:
Ein alter DVB-T Receiver vom Hersteller palcom bzw. dessen Fernbedienung hatte ich vor 10 Jahren mit irrecord eine lircd.conf erstellt. Funktionierte damals sehr gut ohne Firlefans. Wenn ich diese alte conf Datei nehme und den lircd Dienst starte, dann bekomme ich auch per irw die Tastencodes raus. XMMS und Audacious funktionieren.
Wenn ich nun mit irrecord eine neue lirc.conf erstelle, dann funktioniert irw mit der neuen lirc.conf nicht.
Auch andere Fernbedienungen eine Grundig und eben die Strong Fernbedienungen funktionieren nicht.
Ich werde heute abend oder morgen dazu kommen den von dir gegebenen Lösungsansatz anzugehen. Bin gespannt was dabei rauskommt.
Gruß aus DN
Greg
Es gibt wieder viel zu lesen:
lirc_options.conf sieht jetzt so aus:
[lircd]
nodaemon        = False
driver          = default
device          = /dev/lirc0
output          = /var/run/lirc/lircd
pidfile         = /var/run/lirc/lircd.pid
plugindir       = /usr/lib/lirc/plugins
permission      = 666
allow-simulate  = No
repeat-max      = 600
#effective-user =
#listen         = [address:]port
#connect        = host[:port]
#loglevel       = 6
#uinput         = ...
#release        = ...
#logfile        = ...

[lircmd]
uinput          = False
nodaemon        = False

[modinit]
# code = /usr/sbin/modprobe lirc_serial
# code1 = /usr/bin/setfacl -m g:lirc:rw /dev/uinput
# code2 = ...
code = setserial /dev/ttyS0 uart none
code1 = modprobe serial_ir
#code2 = /usr/bin/echo rc-5 > /sys/class/rc/rc0/protocols
lircd ist gestartet.
modprobe -r serial_ir ausgeführt.
lsmod schreibt kein serial_ir mehr geladen.
systemctl restart lircd ausgeführt.
# systemctl status lircd
● lircd.service - Flexible IR remote input/output application support
   Loaded: loaded (/usr/lib/systemd/system/lircd.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2017-04-21 17:03:37 CEST; 1min 23s ago
     Docs: man:lircd(8)
           http://lirc.org/html/configure.html
 Main PID: 1203 (lircd)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/lircd.service
           └─1203 /usr/sbin/lircd --nodaemon

Apr 21 17:03:37 gregina2 lircd-0.10.0-devel[1203]: Notice: Options: configfile: /etc/lirc/lircd.conf
Apr 21 17:03:37 gregina2 lircd-0.10.0-devel[1203]: Notice: Options: dynamic_codes: (null)
Apr 21 17:03:37 gregina2 lircd-0.10.0-devel[1203]: Notice: Current driver: default
Apr 21 17:03:37 gregina2 lircd-0.10.0-devel[1203]: Notice: Driver API version: 3
Apr 21 17:03:37 gregina2 lircd-0.10.0-devel[1203]: Notice: Driver  version: 0.9.4
Apr 21 17:03:37 gregina2 lircd-0.10.0-devel[1203]: Notice: Driver  info: See file:///usr/share/doc/lirc/plugindocs/default.html
Apr 21 17:03:37 gregina2 lircd-0.10.0-devel[1203]: Info: lircd:  Opening log, level: Info
Apr 21 17:03:37 gregina2 lircd-0.10.0-devel[1203]: Warning: Running as root
Apr 21 17:03:37 gregina2 lircd-0.10.0-devel[1203]: Info: Using remote: palcomtest.
Apr 21 17:03:37 gregina2 lircd-0.10.0-devel[1203]: Notice: lircd(default) ready, using /var/run/lirc/lircd
cat protocols zeigt das an:
cat /sys/class/rc/rc0/protocols
other unknown rc-5 nec rc-6 jvc sony rc-5-sz sanyo sharp mce_kbd xmp cec [lirc]
Ich nehme mal an, dass in den []Klammern das aktuell aktive Protokoll steht.
Dann ein
echo rc-5 > /sys/class/rc/rc0/protocols
[root@gregina2 gl]# cat /sys/class/rc/rc0/protocols
other unknown [rc-5] nec rc-6 jvc sony rc-5-sz sanyo sharp mce_kbd xmp cec [lirc]
zeigt jetzt rc-5 zusätzlich in Klammern.
Ein mode2 bringt Aktivität raus:
# mode2
Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0
Warning: Running as root.
space 16777215
pulse 251
space 504470
pulse 8996
...
...
irrecord ohne Parameter eingegeben:
irrecord palcomneu.conf
Die Prozedur mit einigen Tasten durchgeführt und die palcomneu.conf ins Verzeichnis /etc/lirc/lircd.conf.d/ kopiert.
Den Kommentator vor code2 in der lirc_options.conf entfernt.
lircd neu gestartet, cat ..protocols nochmal angesehen, rc-5 ist allerdings nicht in Klammern sondern nur lirc.
irw ausgeführt, klappt nicht. Das gleiche Spiel wie vorher. Die palcmneu.conf sieht auch nicht so aus wie die alte palcom.conf.

Jetzt nochmal neu:

Feststellen auf welchen Protokollen die Fernbedienungen laufen:
Dazu habe ich den devinput mit dem eventdingens benutzt.
lirc_options.conf wie folgt:
[lircd]
nodaemon        = False
driver          = devinput
device          = /dev/input/by-path/platform-serial_ir.0-event-ir
output          = /var/run/lirc/lircd
pidfile         = /var/run/lirc/lircd.pid
plugindir       = /usr/lib/lirc/plugins
permission      = 666
allow-simulate  = No
repeat-max      = 600
#effective-user =
#listen         = [address:]port
#connect        = host[:port]
#loglevel       = 6
#uinput         = ...
#release        = ...
#logfile        = ...

[lircmd]
uinput          = False
nodaemon        = False

[modinit]
# code = /usr/sbin/modprobe lirc_serial
# code1 = /usr/bin/setfacl -m g:lirc:rw /dev/uinput
# code2 = ...
code = setserial /dev/ttyS0 uart none
code1 = modprobe serial_ir
code2 = /usr/bin/echo nec > /sys/class/rc/rc0/protocols

# [lircd-uinput]
# release-timeout = 200
den Daemon lircd und mode2 gestartet.
Zu Anfangs erst unter code2 rc-5 eingetragen und mit mode2 da kam nichts.
Alle Protokolle durchprobiert. Bei der Fernbedienung palcom und bei der Fernbedienung strong wurde dann beim Protokol nec das angezeigt:
# systemctl restart lircd
[root@gregina2 gl]# mode2
Using driver devinput on device /dev/input/by-path/platform-serial_ir.0-event-ir
Trying device: /dev/input/by-path/platform-serial_ir.0-event-ir
Using device: /dev/input/by-path/platform-serial_ir.0-event-ir
Warning: Running as root.
code: 0x1134fa5800000000eab60d00000000000400040011020200
code: 0x1134fa5800000000eab60d00000000000000000000000000
code: 0x1234fa5800000000887d0d00000000000400040011020200
code: 0x1234fa5800000000887d0d00000000000000000000000000
Auch ein cat protocols kam das raus:
# cat /sys/class/rc/rc0/protocols
other unknown rc-5 [nec] rc-6 jvc sony rc-5-sz sanyo sharp mce_kbd xmp cec [lirc]
So, das ist ja mal wenigstens etwas. Jetzt weiß ich schonmal was für ein Protokoll die Dinger haben.
Eine Grundig Fernbedienung habe ich nicht ans laufen gebracht. Es könnte eine andere Trägerfrequenz sein. Mein Empfänger hat den TSOP1738 mit 38khz. Falls die Grundig Fernbedienung eine andere Frequenz hat, dann kann ich diese mit meinen Empfänger nicht auslesen.

Sieht so aus, dass ich mich noch weiter mit dem Kram rumschlagen muss. Ich versuche es dann mit devinput Treiber + ir-keytable.
Ist schon sehr schade, früher ging das alles ohne Probleme. Ich weiß nicht was die lirc Leute sich dabei gedacht haben. Und die Dokus sind nicht gerade sehr hilfreich.
Dann viel mir noch ein, ich habe noch eine uralt Knoppix CD. Die habe ich mal gebootet. Leider war da kein LIRC installiert, kein irrecord. -- Auch nix.
Dank nochmal an xafnir.
Gruß Greg


Nachtrag, Beschreibung wie man eine keymap macht mit Benutzung des devinput Treibers und des eventdevices.
Wenn als Treiber der devinput und das device /dev/input/by-path/platform-serial_ir.0-event-ir benutzt wird, so ist darauf zu achten, dass man die /etc/lirc/lircd.conf.d/devinput.lircd.conf benutzen muss. Also am Ende kein .dist sondern .conf. Andere conf Dateien in diesem Verzeichnis auf .dist umbenennen damit diese dann unwirksam werden.
Hat man wie weiter oben beschrieben das Protokoll ermittelt, sollte in der Zeile code2 das Protokoll eingetragen sein. Siehe oben, als Beispiel nec.
systemctl restart lircd
Das richtige Protokoll übernommen? (In diesem Fall NEC).
# cat /sys/class/rc/rc0/protocols
other unknown rc-5 [nec] rc-6 jvc sony rc-5-sz sanyo sharp mce_kbd xmp cec [lirc]

Eine keymap anlegen:
Eine ähnliche keymap suchen in /lib/udev/rc_keymaps/
Es wurde was ausgewählt was dem nec Protokoll am nächsten liegt.
nec_terratec_cinergy_xs
Diese kopieren nach /etc/rc_keymaps/neuekeymaps
Die obere Zeile anpassen nach Namen der Fernbedienung und Protokoll
# table nec_terratec_cinergy_xs, type: NEC
0x1441 KEY_HOME
...
ändern in
# table neuekeymaps, type: NEC
0x1441 KEY_HOME
...
Ein Terminal aufmachen und mit ir-keytable -c -p NEC -t eine Taste der Fernbedienung betätigen.
Taste 1 ergibt 1492859022.785723: event type EV_MSC(0x04): scancode = 0xc099
Eintragen in die neuekeymaps 0xc099 KEY_1 . Das Ganze mit allen Tasten der Fernbedienung durchführen und die Codes anpassen. Falls eine Taste fehlt, dann diese zusätzlich eintragen. Zu viele Tasten in der keymaps löschen.
Es ist darauf zu Achten, dass die Tastenbezeichnung mit den Namen aus /etc/lirc/devinput.lircd.conf unbedingt übereinstimmen müssen. Sind alle Tasten durch und die keymap fertig, so muss diese übernommen werden.
Die neue keytable übernehmen:
# ir-keytable -c -w /etc/rc_keymaps/neuekeymaps
Read neuekeymaps table
Old keytable cleared
Wrote 34 keycode(s) to driver
Protocols changed to nec 
Quelle:
https://wiki.ubuntuusers.de/Kodi_Remote/

Nach dem Neustart des Rechners funktioniert das wieder nicht.
Damit die keytable beim initialisieren des lircd Daemon geladen wird, muß noch in der /etc/lirc_option.conf eine Zeile eingefügt werden.
code3 = ir-keytable -c -w /etc/rc_keymaps/neuekeymaps
Das Resultat ist, die Fernbedienung funktioniert. Allerdings ist auch bei mir der Fehler drin wie es schon xafnir beschrieben hat. Wird eine Taste betätigt, so wird zuerst der Code ausgegeben der von der Taste zuvor erzeugt wurde.
Ja, ich weiß, es ist sehr viel zu lesen. Da aber die bisherigen Dokus nicht ausreichend waren, könnte das für so Manchem hilfreich sein. Wenn das mit den Tastencodefehler nicht wäre, dann hätte ich ein Wiki daraus gemacht.

Bis denn..
Greg
Hallo nochmal :-), nochmal viel zu lesen:

zu ir-keytable: es gibt noch die Datei /etc/rc_maps.cfg. Darin sind so wie ichs verstanden habe alle bekannten rc-keytable Fernbedieungen aufgelistet.
Deshalb kannst du dort deine 'neuekeymaps' eintragen. Dann wird das auch ohne Probleme nach dem Neustart erkannt.
...
* serial_ir neuekeymaps /etc/rc_keymaps/neuekeymaps

Aber da du dasselbe Problem wie ich mit den doppelten Tasten hast, verwende lieber lirc statt ir-keytable
Schließlich hast du es doch auch fast geschafft. Dein mode2 Ausgabe sieht gut aus.

Ich hab da so eine Ahnung was bei dir schief gelaufen sein könnte.
Du hast irrecord palcomneu.conf, also mit den Namen der conf aufgerufen. irrecord hat dich sicher nach einen Namen der Fernbedienung gefragt. Und so wurden vielleicht zwei .conf Dateien angelegt?

Und noch was was du geschrieben hast:
...Den Kommentator vor code2 in der lirc_options.conf entfernt.
lircd neu gestartet, cat ..protocols nochmal angesehen, rc-5 ist allerdings nicht in Klammern sondern nur lirc.
1. Klingt banal, frage ich trotzdem: Hast du vielleicht vergessen die /etc/lirc/lirc_options.conf zu speichern bevor du lircd neugestartet hast?
2. Bist du dir sicher dass nur die palcomneu.conf und keine weitere .conf in /etc/lirc/lircd.conf.d/ aktiv war?
systemctl status lircd gibt auch den Namen der aktiven Fernbedienung(en) aus.
3. Wenn rc-5 in der /sys/class/rc/rc0/protocols nicht in Klammern steht, ruf mal manuell /usr/bin/echo rc-5 > /sys/class/rc/rc0/protocols auf - ohne lircd neu zu starten. Teste dann nochmals mit irw.

Noch weitere Infos:
Es gibt noch den Sonderfall, dass die Fernbedienung zwei Fernbedienungen abbildet. Bei meiner Sony musste ich für die Tasten KEY_VOLUMEUP,KEY_VOLUMEDOWN, KEY_MUTE ein zweites Mal irrecord aufrufen und so eine zweite .conf Datei anlegen.
Das erkennst du wenn irrecord meint eine Taste nicht zu erkennen und du noch 28-Versuche übrig hast.

Ich vermute, dass irrecord ein besseres Ergebnis liefert, wenn du mehrere unterschiedliche Tasten einliest. Denn irrecord muss erkennen ob es sich um 8bit, 12bit, 15bit,.. Tastencodes handelt. Wenn du z.B. nur die Tasten "1,2,3,4" einliest kann es sein, dass der Tastencode nicht korrekt erkannt wurde. Also mal die Tasten mischen.

Und um dieses 'gap' einzulesen habe ich nacheinander alle Tasten gedrückt. Und da ich dann wusste dass KEY_VOLUMEUP,.. eine zweite Fernbedienung sind, habe ich die ausgelassen.
Haha, noch einer der nicht aufgibt.
Nochmals danke xafnir!!!
Ich bin mir zwar sicher, dass ich keine Fehler gemacht habe, aber dennoch will ich alles nochmals durchgehen.
Erstmal den Daemon gestoppt.
systemctl stop lircd
Dann alles confs mit dist umbenannt.
Auch die lirc_options geändert auf driver default, device /dev/lirc0
code3 Kommentiert
lirc_options gespeichert. (Nicht vergessen).
Dann ein
# cat /sys/class/rc/rc0/protocols
other unknown rc-5 [nec] rc-6 jvc sony rc-5-sz sanyo sharp mce_kbd xmp cec [lirc]
nec ist noch aktiv.
Statt RC-5 muß es ein nec Protokoll sein.
irrecord ohne Parameter aufgerufen.
irrecord /home/gl/palcomneu.conf
Störquelle entfernt (Schnurlostelefon) Enter
Einige Sekunden warten Test auf Rauschen.
Name der Fernbedienung palcomneu eingegeben.
Es sollen jetzt möglichst viele Tasten betätigt werden.
Jeweils 1 Sekunde lang aber weniger als 10 Punkte.
Nach dem ich alle Tasten durch habe und ca. 13 Zeilen mit Punkten im Terminalfenster drin sind, soll jetzt ein Tastenname eingegeben werden.
KEY_1.
Jetzt Taste 1 drücken. Nächster Tastenname usw. bis alle durch sind.
So ganz nebenbei, ich habe mal zwischendurch im anderen Terminalfenster ein
cat /sys/class/rc/rc0/protocols
eingegeben. nec ist dabei jetzt inaktiv. Scheinbar überschreibt irrecord die Protokolleinstellung.
Dann will irrecord das Togglebit lesen.
Fertig. Datei gespeichert als palcomneu.lircd.conf
Eingefügt in /etc/lirc/lircd.conf.d/ wirklich nicht die falsche Datei!!
Es gibt in diesem Verzeichnis auch nur eine .conf Datei eben die palcomneu.
Daemon wieder starten.
systemctl start lircd
journalctl bringt das raus:
Apr 23 09:00:15 gregina2 systemd[1]: Starting lircd(8) initialization helper tool...
Apr 23 09:00:15 gregina2 systemd[1]: Started lircd(8) initialization helper tool.
Apr 23 09:00:15 gregina2 systemd[1]: Started Flexible IR remote input/output application support.
Apr 23 09:00:15 gregina2 lircd-0.9.4d[1741]: Info: lircd:  Opening log, level: Info
Apr 23 09:00:15 gregina2 lircd-0.9.4d[1741]: Info: Initial device: /dev/lirc0
Apr 23 09:00:15 gregina2 lircd-0.9.4d[1741]: Notice: 'lirc' written to protocols file /sys/class/rc/rc0/protocols
Apr 23 09:00:15 gregina2 lircd[1741]: lircd-0.9.4d[1741]: Info: lircd:  Opening log, level: Info
Apr 23 09:00:15 gregina2 lircd[1741]: lircd-0.9.4d[1741]: Warning: Running as root
Apr 23 09:00:15 gregina2 lircd[1741]: lircd-0.9.4d[1741]: Info: Using remote: palcomneu.
Apr 23 09:00:15 gregina2 lircd-0.9.4d[1741]: Info: Initial device: /dev/lirc0
Apr 23 09:00:15 gregina2 lircd[1741]: lircd-0.9.4d[1741]: Notice: lircd(default) ready, using /var/run/lirc/lircd
Apr 23 09:00:15 gregina2 lircd-0.9.4d[1741]: Info: [lirc] protocol is enabled
Apr 23 09:00:15 gregina2 lircd-0.9.4d[1741]: Info: lircd:  Opening log, level: Info
Apr 23 09:00:15 gregina2 lircd-0.9.4d[1741]: Warning: Running as root
Apr 23 09:00:15 gregina2 lircd-0.9.4d[1741]: Info: Using remote: palcomneu.
Apr 23 09:00:15 gregina2 lircd-0.9.4d[1741]: Notice: lircd(default) ready, using /var/run/lirc/lircd
Jetzt ein
irw
---Keine Reaktion.
Noch ein
# mode2
Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0
Warning: Running as root.
pulse 634
space 504397
pulse 9084
Das ist auch das Einzige.
XMMS reagiert auch nicht.
irrecord mag kein nec Protokoll mehr. Früher gings.
Nochmal die alte palcom.conf aktiviert und die palcomneu deaktiviert. restart lircd und irw:
[root@gregina2 gl]# systemctl restart lircd
[root@gregina2 gl]# irw
0000000003fc916e 00 KEY_VOLUMEDOWN palcom
0000000003fc51ae 00 KEY_VOLUMEUP palcom
^C
[root@gregina2 gl]# 
xmms geht.

Tja, soweit alles gecheckt. Ich wüßte jetzt echt nicht, wo da noch der Fehler liegt. Irgendwie geht mir hier die Puste aus. Merkwürdigerweise gibt es auch keine Bugreports weder in Arch noch in lirc.org
Das mit der keymaps in /etc/rc_maps.cfg hatte ich auch irgendwo gelesen aber gestern viel mir das wohl nicht ein. Danke für den Tip!!

Gruß aus DN
Greg
Ruf doch jetzt nochmal spaßeshalber auf:
echo nec > /sys/class/rc/rc0/protocols
Und dann nochmal mit irw testen. Theoretisch müsste es dann gehen. Die Tasten wurden schließlich eingelesen.
Wenn nicht poste mal deine palcomneu.conf, vielleicht fällt mir noch was auf/ein.
Leider klappt das immer noch nicht.
Was ich noch nicht erwähnt habe, die neue palcomneu.lircd.conf sieht auch anders aus als die Alte.
Alte palcom.conf:

# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.9.0(default) on Fri Nov 11 18:24:42 2011
#
# contributed by 
#
# brand:                       /home/gl/palcom
# model no. of remote control: 
# devices being controlled by this remote:
#

begin remote

  name  palcom
  bits           16
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  header       9067  4421
  one           633  1613
  zero          633   493
  ptrail        632
  repeat       9071  2172
  pre_data_bits   16
  pre_data       0x3FC
  gap          107910
  toggle_bit_mask 0x0

      begin codes
          KEY_1                    0x9966
          KEY_2                    0x19E6
          KEY_3                    0x59A6
          KEY_4                    0xD926
          KEY_5                    0xA956
          KEY_6                    0x29D6
          KEY_7                    0x6996
          KEY_8                    0xE916
          KEY_9                    0x8976
          KEY_0                    0x09F6
          KEY_TEXT                 0x49B6
          KEY_I                    0x2BD4
          KEY_MUTE                 0xF10E
          KEY_TV                   0x7986
          KEY_TV/RAD               0x39C6
          KEY_POWER                0xF906
          KEY_AUDIO                0xB946
          KEY_EXIT                 0xB14E
          KEY_MENU                 0x41BE
          KEY_EPG                  0x01FE
          KEY_ALT                  0x1BE4
          KEY_SUB                  0x3BC4
          KEY_PAGEUP               0xE11E
          KEY_CHANNELUP                 0x31CE
          KEY_CHANNELDOWN               0x21DE
          KEY_VOLUMEDOWN           0x916E
          KEY_VOLUMEUP             0x51AE
          KEY_BROWSE               0xC936
          KEY_FREEZE               0x718E
          KEY_PAGEDOWN             0xC13E
          KEY_RED                  0xD12E
          KEY_GREEN                0xA15E
          KEY_YELLOW               0x619E
          KEY_BLUE                 0x817E
          KEY_OK                   0x11EE
      end codes

end remote
Neue palcomneu.lircd.conf

# Please take the time to finish this file as described in
# https://sourceforge.net/p/lirc-remotes/wiki/Checklist/
# and make it available to others by sending it to
# <lirc@bartelmus.de>
#
# This config file was automatically generated
# using lirc-0.9.4d(default) on Sun Apr 23 09:12:58 2017
# Command line used: /home/gl/palcomneu.conf
# Kernel version (uname -r): 4.10.8-1-ARCH
#
# Remote name (as of config file): palcomneu
# Brand of remote device, the thing you hold in your hand:
# Remote device model nr:
# Remote device info url:
# Does remote device has a bundled capture device e. g., a
#     usb dongle? :
# For bundled USB devices: usb vendor id, product id
#     and device string (use dmesg or lsusb):
# Type of device controlled
#     (TV, VCR, Audio, DVD, Satellite, Cable, HTPC, ...) :
# Device(s) controlled by this remote:

begin remote

  name  palcomneu
  bits           32
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  header       9067  4416
  one           640  1609
  zero          640   478
  ptrail        641
  repeat       9069  2166
  gap          107882
  toggle_bit_mask 0x0
  frequency    38000

      begin codes
          KEY_VOLUMEUP             0x03FC51AE 0xFFFFFFFF
          KEY_VOLUMEDOWN           0x03FC916E 0xFFFFFFFF
          KEY_CHANNELUP            0x03FC31CE 0xFFFFFFFF
          KEY_CHANNELDOWN          0x03FC21DE 0xFFFFFFFF
          KEY_RED                 0x03FCD12E 0xFFFFFFFF
          KEY_GREEN             0x03FCA15E 0xFFFFFFFF
          KEY_YELLOW                 0x03FC619E 0xFFFFFFFF
          KEY_BLUE                 0x03FC817E 0xFFFFFFFF
      end codes

end remote
Bei dieser habe ich nur wenige Tasten eingegeben, ich brauche nur die Funktionen für Xmms und Audacious.
Ich habe noch festgestellt, dass irrecord eine Logdatei anlegt. In /root/.cache/irrecord.log ist dann das drin:
Apr 23 19:57:06.898684 gregina2 irrecord: Info: irrecord:  Opening log, level: Info
Apr 23 19:57:06.898810 gregina2 irrecord: Info: Initial device: /dev/lirc0
Apr 23 19:57:06.898941 gregina2 irrecord: Notice: 'lirc' written to protocols file /sys/class/rc/rc0/protocols
Apr 23 19:57:06.899035 gregina2 irrecord: Info: [lirc] protocol is enabled
Apr 23 20:01:21.669203 gregina2 irrecord: Info: [lirc] protocol is enabled
Apr 23 20:01:21.669318 gregina2 irrecord: Info: Using remote: palcomneu2.
Apr 23 20:01:21.669423 gregina2 irrecord: Warning: palcomneu2.lircd.conf: palcomneu2: Invalid code KEY_VOLUMEUP: (null)
Apr 23 20:01:21.669448 gregina2 irrecord: Warning: palcomneu2.lircd.conf: palcomneu2: Invalid code KEY_VOLUMEDOWN: @÷Èz3
Apr 23 20:01:21.669467 gregina2 irrecord: Warning: palcomneu2.lircd.conf: palcomneu2: Invalid code KEY_CHANNELUP: @÷Èz3
Apr 23 20:01:21.669487 gregina2 irrecord: Warning: palcomneu2.lircd.conf: palcomneu2: Invalid code KEY_CHANNELDOWN: @÷Èz3
Apr 23 20:01:21.669508 gregina2 irrecord: Warning: palcomneu2.lircd.conf: palcomneu2: Invalid code KEY_RED: @÷Èz3
Apr 23 20:01:21.669520 gregina2 irrecord: Warning: palcomneu2.lircd.conf: palcomneu2: Invalid code KEY_GREEN: @÷Èz3
Apr 23 20:01:21.669531 gregina2 irrecord: Warning: palcomneu2.lircd.conf: palcomneu2: Invalid code KEY_YELLOW: @÷Èz3
Apr 23 20:01:21.669542 gregina2 irrecord: Warning: palcomneu2.lircd.conf: palcomneu2: Invalid code KEY_BLUE: @÷Èz3
Naja, invalid code sagt ja eigentlich schon Alles. Und trotzdem wird eine conf Datei erzeugt. Sehr merkwürdig. Der mag kein nec.

Jetzt habe ich mir mal überlegt, das alte lirc Paket 0.9.0 noch von 2011 zu bauen. Das aber dürfte sehr schwierig werden, da damals schon diverse Patches für neuere kernel benötigt wurden. Mal abgesehen davon, ob das überhaupt lauffähig wäre. Grummel. Dann habe ich mal die lirc-git Version installiert, da dort weiter dran gearbeitet wird. Hat aber auch nichts gebracht.

Wer weiß noch was???
Gruß aus DN
Greg
Die alte hat 16bit, die neue 32bit Tastencodes....und Invalid Keycodes sprechen vermutlich dafür dass diese Tasten einen eigenen Code senden.
Lies mal die Fernbedieung einmal ohne die invalid Tatten, und einmal nur mit den invalid Tasten ein. Beide lircd.conf aktiv lassen und schauen ob dann irw funktioniert.

In der man Page steht dazu was unter "Multiple-personalities remotes" direkt unter "TROUBLESHOOTING".