
Verwandt:FullHD-LCD-Monitor wird als 1024 x 768 CRT gelesen, Problem mit der falschen Auflösung
Ich hatte Probleme mit meinem DVI-Kabel an meinem Yiynova MVP22u-Digitalisierer, er überträgt keine EDID-Daten mehr. Da ich zufällig keine Kopie der EDID-Daten für den Monitor hatte, habe ich, um die Auflösung des Monitors richtig einzustellen, die EDID von einem anderen Monitor verwendet. Dadurch wurde das Problem mit der falschen Bildschirmauflösung gelöst, aber ein neues Problem geschaffen.
Der Bereich des Zeigers ist korrekt auf den Bildschirm beschränkt, der sich unter meinem anderen Bildschirm befindet, und zwar durch
xinput set-prop 8 "Evdev Axis Calibration" 0 2040 -2000 2020
Mein Tablet-Monitor ist kleiner als ein anderer 1080p-LCD-Monitor.
Das Problem, das sich ergab, ist jedoch, dass der aktive Zeichenbereich auf dem Bildschirm völlig unproportional zum aktiven Zeichenbereich in den Treibern ist. Oder einfacher ausgedrückt:
Wenn ich jetzt mit meinem Stift auf dem Tablet zeichne, zieht ein kleiner Bereich in der oberen linken Ecke meines Bildschirms meinen Zeiger über den gesamten Bildschirm. Wir sprechen hier von einem Bereich von ungefähr 1 x 1 Zoll, der auf die gesamte Bildschirmfläche von 22 Zoll übertragen wird. Wenn ich den Stift außerhalb dieses 1 x 1-Bereichs bewege, bewegt sich der Zeiger in die Ecken des Bildschirms.
Ich verwende Digimend und evdev, das sind die Parameter, mit denen ich arbeiten muss.
xinput list-props 8
Device 'UC-LOGIC 21.5" Tablet Monitor Pen':
Device Enabled (152): 1
Coordinate Transformation Matrix (154): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (278): 0
Device Accel Constant Deceleration (279): 1.000000
Device Accel Adaptive Deceleration (280): 1.000000
Device Accel Velocity Scaling (281): 10.000000
Device Product ID (271): 21827, 77
Device Node (272): "/dev/input/event9"
Evdev Axis Inversion (282): 0, 0
Evdev Axis Calibration (283): 0, 2040, -2000, 2020
Evdev Axes Swap (284): 0
Axis Labels (285): "Abs X" (275), "Abs Y" (276), "Abs Pressure" (277)
Button Labels (286): "Button Unknown" (274), "Button Unknown" (274), "Button Unknown" (274), "Button Wheel Up" (158), "Button Wheel Down" (159), "Button Horiz Wheel Left" (160), "Button Horiz Wheel Right" (161)
Evdev Scrolling Distance (287): 0, 0, 0
Evdev Middle Button Emulation (288): 0
Evdev Middle Button Timeout (289): 50
Evdev Middle Button Button (290): 2
Evdev Third Button Emulation (291): 0
Evdev Third Button Emulation Timeout (292): 1000
Evdev Third Button Emulation Button (293): 3
Evdev Third Button Emulation Threshold (294): 20
Evdev Wheel Emulation (295): 0
Evdev Wheel Emulation Axes (296): 0, 0, 4, 5
Evdev Wheel Emulation Inertia (297): 10
Evdev Wheel Emulation Timeout (298): 200
Evdev Wheel Emulation Button (299): 4
Evdev Drag Lock Buttons (300): 0
Am wahrscheinlichsten könnte mein Problem die „Coordinate Transformation Matrix“ lösen, aber ich habe absolut keine Ahnung, wie sie funktioniert. Ich habe online eine Menge darüber gelesen, aber es ergibt für mich überhaupt keinen Sinn.
Ich wünschte, ich könnte einfach mein Kabel austauschen und auf diese Weise die richtige EDID herausbekommen, aber das ist keine Option, da das Kabel in den Bildschirm eingebettet ist.
Wir wären für jede Hilfe sehr dankbar.
Antwort1
Ich habe es gelöst, es war einfacher als ich dachte. Ich habe den Windows-Treiber von Nvidia verwendet, um eine benutzerdefinierte Auflösung für den Bildschirm zu erstellen, und dann habe ich die dadurch erstellte EDID in einer Datei gespeichert (dies war im Grunde nur eine EDID, die nichts anderes aussagte, als dass der Bildschirm eine Auflösung von 1920 x 1080 unterstützt, theoretisch hätte jede EDID mit dieser Auflösung funktionieren sollen). Ich habe sie extrahiert mitnirsoft MonitorInfoViewund es in einer Binärdatei gespeichert.
Damit der Bildschirm in X11 unter Nvidia mit der richtigen Auflösung läuft, musste ich anschließend in xorg.conf.d/10-monitor.conf eine Option festlegen, um X anzuweisen, diese EDID für den Bildschirm zu verwenden (sah ungefähr so aus:)
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "CustomEDID" "DVI-I-0:/path/to/edidfilename.bin"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Wobei DVI-I-0 der DVI-Anschluss ist, an den mein Tablet laut xrandr angeschlossen ist.
^das war mein Standpunkt, als ich die ursprüngliche Frage schrieb. Was mir jedoch bis jetzt nicht klar war, ist, dass die Digimend-Treiber die Auflösungsinformationen anscheinend aus dem Kernel/kms beziehen, nicht aus X11. (Ein bisschen wie Wayland)
Um dieses Problem zu lösen, musste ich meine benutzerdefinierte EDID-Datei hierher verschieben:
/usr/lib/firmware/edid/edidfilename.bin
und um es dann endgültig zu lösen und den KMS dazu zu bringen, diese EDID für diese Anzeige zu lesen, musste ich diese Zeile zur Kernel-Befehlszeile hinzufügen (wenn Sie Grub verwenden, können Sie dies in /etc/default/grub festlegen, Sie müssen grub-mkconfig ausführen und neu starten, damit die Einstellungen wirksam werden)
drm_kms_helper.edid_firmware=DVI-I-0:edid/edidfilename.bin
(Beachten Sie, dass Sie den DVI-I-0-Teil auch überspringen und einfach „...=edid/edidfilename.bin“ schreiben können.)
Dies löst das Problem, mit dem ich konfrontiert war. Der Rest kann nun erfolgreich über xinput- oder xorg.conf-Dateien konfiguriert werden, indem die evdev-Achsenkalibrierung für das Tablet eingestellt wird, um seine vorherige Funktionalität wiederherzustellen. Ich hoffe, das hilft jemandem. Sie müssen nicht dasselbe Tablet haben (dasselbe kann wahrscheinlich mit jedem von Digimend unterstützten Monitor-Tablet passieren).
Sieht aus, als könnte ich endlich mit dem Zeichnen unter Windows aufhören :D