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
...
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