ubuntuusers.de

USB-CEC-Adapter im System registrieren

Status: Gelöst | Ubuntu-Version: Xubuntu 22.04 (Jammy Jellyfish)
Antworten |

Fried-rich

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Hallo,

ich habe einen USB-CEC-Adapter von PulseEight. Damit kann man per HDMI angeschlossene Geräte wie den TV steuern. Das können 99,9% aller Grafikkarten von Haus aus nicht. Der Adapter läuft wie hier https://www.kernel.org/doc/html/latest/admin-guide/media/cec.html unter Punkt 4.4 beschrieben. Ich nutze das Tool 'cec-ctl'. Es gibt noch 'cec-client', der bringt aber eine Fehlermeldung und ich hab' mich nicht weiter damit beschäftigt.

Ich muss aber nach dem Systemstart manuell noch

sudo cec-ctl --playback
sudo cec-ctl -E /sys/class/drm/card0-HDMI-A-1/edid

ausführen. Der erste 'registriert' den Adapter im System (k.A. was das genau heißt), der zweite lädt die edid (eine Datei die Infos über das andere HDMI-Gerät speichert, hier der TV).

Ich habe erst einmal ganz naiv

sudo cec-ctl --playback && sudo cec-ctl -E /sys/class/drm/card0-HDMI-A-1/edid

in Cron gepackt (mit dem kompletten Pfad zur cec-ctl). Geht nicht, auch mit 'sleep 60' davor nicht. cec-ctl steht in der Sudoers und wird ohne Eingabe eines Passworts ausgeführt (weil es später in einem Script laufen soll). Geht das in einem Cron nicht wegen dem 'sudo'? Der zweite Aufruf muss im Terminal manuell mit STRG+C abgebrochen werden, das fehlt natürlich in Cron. Das scheint aber keinen Effekt zu haben, denn wenn ich in einem Terminal das Kommando ausführe ohne STRG+C und in einem zweiten normal cec-ctl teste geht alles. STRG+C ändert also nichts.

Wie sollte man die Kommandos am besten starten? Über Systemd? Im Link oben wird ja unter /lib/systemd/system/ angelegt. Vielleicht dort anhängen?

schragge

Anmeldungsdatum:
27. Januar 2022

Beiträge: 181

Ein systemd-Dienst wie im Link beschrieben ist m.E. die bessere Lösung. Ich würde ihn allerdings unter /etc/systemd/system anlegen.

Für welchen Nutzer hast du den Cron-Job angelegt? Wenn für root, dann brauchst du natürlich kein sudo.

Und ich habe nicht verstanden, warum der zweite Befehl mit STRG+C abgebrochen werden muss.

Fried-rich

(Themenstarter)

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Die Systemd-Unit ist aber für 'inputattach' damit überhaupt ein Device /dev/cec0 verfügbar ist. Die zweite Unit ist für einen anderen Adapter von "RainShadow Tech". Habe gerade gesehen, dass dort beschrieben würde wie man den zweiten Command (das laden der edid) über Crontab macht. Dort wird aber kein 'sudo' genutzt, was bei mir aber nicht geht.

Failed to open /dev/cec0: Permission denied

Und ich habe nicht verstanden, warum der zweite Befehl mit STRG+C abgebrochen werden muss.

Ich auch nicht.

schragge

Anmeldungsdatum:
27. Januar 2022

Beiträge: 181

Fried-rich schrieb:

Ich auch nicht.

Habs gefunden. Steht doch in man cec-ctl

-E, --phys-addr-from-edid-poll <path>

Parse the given EDID file (in raw binary format) and extract the physical address. If the EDID file does not exist or does not contain a physical address, then invalidate the physical address. Poll for changes in this EDID file every 100 ms and, if changed, update the physical address.

This provides a way for Pulse-Eight (or similar) USB CEC dongles to become aware of HDMI disconnect and reconnect events.

Polling happens in the background while cec-ctl processes other requested actions (i.e. transmitting messages, waiting for replies, etc.) and when that is all done cec-ctl will keep polling until the user kills cec-ctl (Ctrl-C).

Du musst entweder -e statt -E angeben oder & am Ende anfügen.

schragge

Anmeldungsdatum:
27. Januar 2022

Beiträge: 181

Fried-rich schrieb:

Dort wird aber kein 'sudo' genutzt, was bei mir aber nicht geht.

 sudo crontab -u root -e

Fried-rich

(Themenstarter)

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Hast recht mit -e geht es, hatte ich nicht gesehen. Ich hab das ganze jetzt über den xfce-autostart geregelt. Geht erst einmal.

Antworten |