DVB-Cube <<< Das deutsche PC und DVB-Forum >>>

Diverse DVB Software für verschiedene Karten => # Linux DVB (vdr, kaffeine, ect.) => Thema gestartet von: mtron am 04 Juni, 2018, 20:17

Titel: Howto: Ausgeschalteten Fernseher (HDMI) als Ausgabegrät konfigurieren
Beitrag von: mtron am 04 Juni, 2018, 20:17
Dieses HowTo erklärt wie man unter ubuntu Linux mit den in intel CPUs integrierten 'video encoding and decoding hardware core' als Grafikkarte einen ausgeschalteten Fernseher (oder anderen HDMI Monitor) für den Display Server Xorg als verfügbares Display Device mit einer 1080p 50 fps (https://en.wikipedia.org/wiki/1080p) Auflösung konfiguriert. Der Grund für diese Verrenkungen ist, dass der alte X.org Display Server beim starten alle Devices eingeschaltet braucht was bei mir oft nicht der Fall ist. Der X-Server und VDR sollen beim Start denken, da ist ein TV dran, selbst wenn kein HDMI Kabel steckt.

Dieser Post ist eine leicht angepasste Version der von User fnu (https://www.vdr-portal.de/index.php?user/715-fnu/) im vdr-portal.de (https://www.vdr-portal.de) veröffentlichten Anleitung mit dem Titel :"Zusammenfassung Intel VAAPI & edid.bin (https://www.vdr-portal.de/forum/index.php?thread/131918-zusammenfassung-intel-vaapi-edid-bin/)" .  Ich kopiere es hierher sollte das vdr-portal wieder mal nicht erreichbar sein, und da ich es hier leichter wieder finden kann  ;)

* Fernseher einschalten und die edid.bin (https://kodi.wiki/view/Creating_and_using_edid.bin_via_xorg.conf) (= Display Informationen des Fernsehers) generieren. Device Path 'card0-HDMI-A-1' ggf. anpassen

sudo mkdir /lib/firmware/edid
 sudo cp /sys/class/drm/card0-HDMI-A-1/edid /lib/firmware/edid/edid.bin

* via Grub bootloader die edid.bin dem kernel als parameter übergeben

sudo nano /etc/default/grub
...
GRUB_CMDLINE_LINUX="video=HDMI-A-1:1920x1080@50D drm.edid_firmware=HDMI-A-1:edid/edid.bin"
...

Ausgang HDMI1 wird hier auf Full-HD 50 FPS (1920x1080@50p) forciert, das D danach setzt diese Werte für alle digitalen Ports.

Für Kernel <4.15.0 muss man statt 'drm.edid_firmware=' die alte Variante 'drm_kms_helper.edid_firmware=' verwenden.

* Das initramfs (https://wiki.ubuntu.com/Initramfs) (initiale Root filesystem von dem aus das wirkliche user Filesystem beim Start geladen wird) muss auch noch neu generiert werden. Folgender 'Hook' integriert die edid.bin (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=da0df92b57311aa1b26a2a90599ed16e1e968b90) in alle zukünftig generierten initramfs images, die nach jedem kernel update automatisch neu generiert werden.
sudo nano /etc/initramfs-tools/hooks/include-edid-data

#!/bin/sh
PREREQ="udev"
prereqs()
{
   echo "$PREREQ"
}
case $1 in
 prereqs)
  prereqs
  exit 0
  ;;
esac

. /usr/share/initramfs-tools/hook-functions

# Begin real processing below this line
if [ ! -e "${DESTDIR}/lib/firmware/edid" ]; then
    mkdir -p "${DESTDIR}/lib/firmware/edid"
fi
if [ -r "/lib/firmware/edid/edid.bin" ]; then
   cp "/lib/firmware/edid/edid.bin" "${DESTDIR}/lib/firmware/edid/"
fi
manual_add_modules i915 radeon
exit 0

Jetzt das script noch ausführbar machen:
sudo chmod +x /etc/initramfs-tools/hooks/include-edid-data
und die initiale Ramdisk neu generieren:
sudo update-initramfs -u
sudo update-grub

* Xorg Konfiguration zum laden der edid.bin anpassen . Via Strg+Alt+F2 auf einen System Terminal wechseln, anmelden, via 'sudo -s' zum root machen und die xorg.conf generieren lassen
X -configure
cp /root/xorg.conf.new /etc/X11/xorg.conf

Via Strg+Alt+F7 wieder auf den Desktop zurückwechseln und die /etc/X11/xorg.conf in der Section "Device" sowie der Screen Sub-Section "Display" anpassen:

sudo nano  /etc/X11/xorg.conf
/etc/X11/xorg.conf
...
    Section "Device"
        ...
        Option         "CustomEDID" "HDMI1:/lib/firmware/edid/edid.bin"
        Option         "IgnoreEDID" "false"
        Option         "UseEDID" "true"
        Option         "TearFree" "true"
    EndSection
    ...
    Section "Screen"
        Identifier     "Screen0"
        Device         "Device0"
        Monitor        "HDMI1"
        DefaultDepth    24
        SubSection     "Display"
            Depth       24
            Modes      "1920x1080@50p" "1920x1080@59.94p" "1920x1080@23.97" "1920x1080@24p" "1920x1080@60p"
        EndSubSection
    EndSection
 ...
[close]

 Nach dem reboot und abgezogenem HDMI Kabel kann man via
dmesg | grep drm
verifizieren, daß die edid.bin geladen wurde. Damit kann ich jetzt endlich VDR mit Softhddevice (http://www.vdr-wiki.de/wiki/index.php/Softhddevice-plugin) im 'Detached 'Mode starten und dann bei Bedarf das Softhddevice Video Fenster an den Fernseher schicken.  :jb
Titel: Re: Howto: Ausgeschalteten Fernseher (HDMI) als Ausgabegrät konfigurieren
Beitrag von: Jürgen am 05 Juni, 2018, 02:26
Nur eine rein theoretische Frage dazu:

Was würde nun passieren, wenn man an so ein System einen Monitor anschließt, der den gewählten Modus gar nicht beherrscht?

Bei meinem ollen RasPi (als Desktop-System) kann sowas ja zu hartnäckiger Dunkelheit führen, wie früher schon erlebt. Da wird der Grafikmodus immer beim Boot fest vorgegeben, damit der Desktop überhaupt mit 1080p50 los geht.
Zum Glück klappt's aber verlässlich wieder, sobald man zum altbekannten geeigneten Monitor zurückgeht.

Und unter Win erlebe ich ähnliches jedesmal nach Build-Updates, wenn wieder ein Pixelformat verwendet wird, das mein alter Monitor tatsächlich noch nicht beherrscht (YCbCr 4.4.4). Nur noch grelles Rosa und Lila, mein armes Y-Chromosom...
EDID schön und gut, aber Irren ist technisch ;)
Da schicke ich dann kurzerhand per 4:2 Matrix auf den TV, um augenschonend zurück zu finden.

Gibt's unter Linux eigentlich auch Tools wie DesktopOK, zur Wiederherstellung der eigenen Ordnung der Desktopicons usw.? Oder sind Tuxe auch auf recht üppigen Systemen immun? Unter Win gehen die ja gern mal komplett und nachhaltig durcheinander, sobald sich die Grafik spontan entschließt, einen anderen Modus auszuprobieren...
Insbesondere bei recht langen bzw. kritisch schlechten HDMI-Kabeln kann das auch gern mal passieren, oder mit Splittern, Schaltern und Gedöns, bei denen es nicht möglich ist, eine EDID gleich für zwei verschiedene Monitore festzulegen.
Titel: Re: Howto: Ausgeschalteten Fernseher (HDMI) als Ausgabegrät konfigurieren
Beitrag von: mtron am 08 Juni, 2018, 17:16
Was würde nun passieren, wenn man an so ein System einen Monitor anschließt, der den gewählten Modus gar nicht beherrscht?

Wenn der Monitor es wirklich gar nicht beherrscht bekommst du auch kein Bild. Am besten du definierst dir eine "Fallback" Modeline die der Monitor kann. Es wird von Xorg die am ersten im conffile aufscheinende Modeline genommen, dann die nächste usw. Es spricht also nichts dagegen eine Modeline für jeden deiner Monitore zu hinterlegen um auf Nummer sicher zu gehen wirklich ein Bild zu bekommen.

Dafür kannst du in der Regel dieselbe edid.bin refernzieren. Wenn diese auf einem Device generierst, das ordentlich alle unterstützten Modelines ausgibt ist da alles drin. Ich verwende die edid.bin meines Toshiba Fernsehers für 2 weitere PC Monitore (einer Dell und einer Acer, die beide behaupten 1080p50 nicht zu können), zwingt man aber Xorg dazu dennoch das Signal so zu senden verarbeiten es die beiden Monitore problemlos.)

Fnu (der Autor dieser Anleitung) schreibt dazu im vdr-protal (https://www.vdr-portal.de/forum/index.php?thread/131918-zusammenfassung-intel-vaapi-edid-bin/&postID=1305544#post1305544):
Zitat von: fnu
Die im EDID enthaltenen Modelines sind nach "Electronic Industries Alliance (EIA-861B)" standardisiert und sollten von den allermeisten Displays unterstützt werden.

Es gibt natürlich keine Garantien, aber in 98% der Fälle sollte eine Standard edid.bin mit einer EIA Standardauflösung erstmal funktionieren.

Bei meinem ollen RasPi (als Desktop-System) kann sowas ja zu hartnäckiger Dunkelheit führen, wie früher schon erlebt. Da wird der Grafikmodus immer beim Boot fest vorgegeben, damit der Desktop überhaupt mit 1080p50 los geht.

Ich hab mal versucht den Raspberry über einen hdmi=>dvi Adapter an meinem Dell (der hat nur doch DisplayPort und DVI) anzustöpseln was auch ein paar mal ging und dann wieder nicht. Da scheinen die Rasperries sehr heikel zu sein.

Gibt's unter Linux eigentlich auch Tools wie DesktopOK, zur Wiederherstellung der eigenen Ordnung der Desktopicons usw.?

Das hängt natürlich vom Destop Environment ab. Ich kann da nur von meinem 'mate' sprechen, wo der Desktop Hintergrund und die Icons vom 'Nemo' Datei Manager verwaltet werden.  Damit habe ich diesbezüglich seit vielen Jahren dieses Problem nicht mehr gesehen. Die Position der Icons wird je nach Auflösung des Monitors gespeichert und passt eigentlich immer.