Xorg und i3 Probleme mit externem Bildschirm (Auflösung, Arbeitsbereich)

Kamikaze

Warrior of Sunlight
Teammitglied
Ich habe mir einen aktiven HDMI auf DP Konverter besorgt. Der Konverter kann nur bis 4k@30Hz, der Monitor unterstützt nur 4k@60Hz und 4k@24Hz, was ich mit einer ModeLine fummeln musste, damit ich ein Bild bekomme.

Aber immerhin funktioniert es, ist jetzt nicht gerade zum Zocken aber alles Andere geht noch!

Jetzt habe ich aber zwei Probleme, das erste mit i3. Wenn der 4k Monitor angeschlossen ist, nutzt i3 den FullHD Arbeitsbereich des internen Monitors (eDP-1), siehe Screenshot:

2019-01-24 Xorg FHD+UHD.jpg

Wenn er angeschlossen ist, würde ich gerne den Arbeitsbereich auf dem 4K Schirm haben. Der Laptop liegt dann sowieso zugeklappt auf dem Tisch.

Das zweite Problem ist, dass Xorg die Pixelzahl für den großen Monitor und die DisplaySize des Laptop Schirms verwendet um die DPI zu berechnen, so dass alles doppelt so groß ist wie es sein sollte.

Natürlich kann ich das zurechtscripten und auf eine Tastenkombination legen aber ich hätte es natürlich gerne so konfiguriert, dass es automatisch richtig ist.
 
Kann das sein das wenn der 4k Monitor angeschlossen ist, eDP-1 aktiv bleibt?

Falls ja, schalte ihn manuell via xrandr aus und starte i3 neu. Falls nicht, starte nach dem Anschließen des Monitors trotzdem i3 mal neu. Das Verhalten habe ich selbst schon erlebt und so lösen können.
 
Kann das sein das wenn der 4k Monitor angeschlossen ist, eDP-1 aktiv bleibt?
Definitiv.
Falls ja, schalte ihn manuell via xrandr aus und starte i3 neu. Falls nicht, starte nach dem Anschließen des Monitors trotzdem i3 mal neu. Das Verhalten habe ich selbst schon erlebt und so lösen können.
Der i3 Neustart ist gar nicht nötig, der passt sich sofort an. Ich würde das gerne per devd machen, mit dem Lid event. Aber devd läuft als root und der xrandr Befehl müsste natürlich mit dem Benutzer ausgeführt werden, der an X eingeloggt ist.
 
Der i3 Neustart ist gar nicht nötig, der passt sich sofort an. Ich würde das gerne per devd machen, mit dem Lid event. Aber devd läuft als root und der xrandr Befehl müsste natürlich mit dem Benutzer ausgeführt werden, der an X eingeloggt ist.
Je nach Menge der zu akzeptierenden Schmerzen müsste man da was mit der DISPLAY Variable und xauth hacken können.
 
Kamikaze: IMO sollte der User einen Prozess laufen haben der sich auf einem PUBSUB Bus subscribed und devd sollte dort ein passendes Event reinwerfen.
 
Das Event kann man auch direkt aus /var/run/devd.pipe bekommen.

Aber dann gibt es ein paar offene Fragen:

- Wie installiere ich das für jeden Benutzer?
- Wann beendet sich das?
- Wie funktioniert das, wenn der Login Manager aktiv ist?
 
Konntest du das Problem schon angehen?
Zur Automation unter FreeBSD kann ich leider garnichts beitragen, aber mich interessiert die Geschichte trotzdem. :)
 
Da mir kein guter Ansatz eingefallen ist, habe ich einen sehr simplen Ansatz gewählt um ein Teilproblem zu lösen.

Folgendes schaltet den internen Bildschirm ein/aus wenn der Laptop auf-/zugeklappt wird. Allerdings nur wenn ich eingeloggt bin.

Unter ~/.devd-daemon.conf liegt folgende Datei:
Code:
/system=ACPI/ && /subsystem=Lid/ && /notify=0x00/ {
    system("xrandr --output eDP-1 --off")
    system("hsetroot -fill ~/.background.png")
}

/system=ACPI/ && /subsystem=Lid/ && /notify=0x01/ {
    system("xrandr --output eDP-1 --auto")
    system("hsetroot -fill ~/.background.png")
}

Unter ~/bin/devd-daemon liegt folgendes Skript:
Code:
#!/bin/sh
if [ -z "$1" ]; then
    /usr/bin/lockf -st0 ~/.devd-daemon.lock $0 locked &
    exit
fi
/bin/cat /var/run/devd.pipe | /usr/bin/awk -f ~/.devd-daemon.conf

Gestartet wir der Daemon aus ~/.xsession:
Code:
#!/bin/sh -f
/usr/local/bin/xmodmap ~/.Xmodmap
/usr/local/bin/gpg-agent --daemon
/usr/local/bin/urxvtd -o -f
~/bin/devd-daemon
exec /usr/local/bin/i3
 
Kamikaze: Das ist echt dreckig. Dieses Script fliegt dir um die Ohren sobald devd neustartet. Außerdem kannst du nur ne handvoll Reader haben, weil devd iirc nur bis zu 10 Reader unterstützt. Leider fällt mir keine saubere Lösung ein, die nicht deutlich komplizierter ist z.B. devd Messages an nen MQTT zu Broker füttern.
 
Kamikaze: Das ist echt dreckig. Dieses Script fliegt dir um die Ohren sobald devd neustartet. Außerdem kannst du nur ne handvoll Reader haben, weil devd iirc nur bis zu 10 Reader unterstützt. Leider fällt mir keine saubere Lösung ein, die nicht deutlich komplizierter ist z.B. devd Messages an nen MQTT zu Broker füttern.
Die Anzahl devd Queues ist konfigurierbar. Alles andere was Du sagst stimmt natürlich auch. Aber das Verhältnis von Aufwand und nutzen passt hier einfach.
 
Zurück
Oben