Svenum
Anmeldungsdatum: 1. August 2018
Beiträge: 27
|
Hallo,
ich suche einen Befehl für ein Bash-Script, der immer checkt ob Display Port angeschlossen ist oder nicht und wenn Es angeschlossen wird das dann ein Befehl(oder Script) ausgeführt wird.
Kann mir jemand Helfen?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Was für eine Grafikkarte (und Treiber) hast du? Bei Intel und AMD kann über die in /sys/class/drm/card*-*/status angelegten Knoten gehen, also z.B. so die verbundenen Anschlüsse herausfinden (zumindest solange man keine EDID für den Anschluss erzwingt):
grep -Rn "^connected" /sys/class/drm/card*-*/status | grep -Po "(?<=/sys/class/drm/card0-).*?(?=/status)" Bzw. für ein bestimmtes Display an einer bestimmten Karte:
| if grep "^connected" /sys/class/drm/card0-DP-0/status
then
echo "DP-0 is connected"
fi
|
Ansonsten kann man sich mit xrandr ansehen, an welchen Anschlüssen Bildschirme erkannt wurden (solange man keine statische Display-Konfiguration mit erzwungener EDID für Anschlüsse nutzt).
|
Kätzchen
Anmeldungsdatum: 1. Mai 2011
Beiträge: 6677
Wohnort: Technische Republik
|
Ich vermute das dein Thema in Shell und Programmieren eher gelöst werden kann. Falls du das auch so siehst, dann klicke Melden und bitte einen Moderator dein Thema zu verschieben. Edit: Ah geht schon los. wird dann vermutlich automatisch verschoben.
|
Svenum
(Themenstarter)
Anmeldungsdatum: 1. August 2018
Beiträge: 27
|
seahawk1986 schrieb: Was für eine Grafikkarte (und Treiber) hast du?(zumindest solange man keine EDID für den Anschluss erzwingt):
Ich habe die Nvidia GeForce GTX 1050 Ti und den Original Treiber, jedoch beführchte ich das der EDID (ich weiß leider nicht genau was das ist) autmatisch benutzt (weil man das EDID in einer Datei speichern kann). Wie kann man das mit dem EDID machen oder muss ich es dafür irgendwie deaktivieren? Den Rest, denn du geschrieben hast habe ich verstanden,aber funktioniert leider nicht. Egal ob Es angeschlossen ist oder nicht, es wird immer "disconnected" angezeigt.
|
dirkolus
Anmeldungsdatum: 17. Mai 2011
Beiträge: 1999
Wohnort: dahoam
|
Wird ein UDev Event ausgelöst? Vllt. ist dann das hier eine Lösung:
https://wiki.archlinux.org/index.php/udev EDID ist die Info, die der Monitor an die Grafikkarte sendet.
|
Svenum
(Themenstarter)
Anmeldungsdatum: 1. August 2018
Beiträge: 27
|
Vielen Danke! Ich habe mein 1. Problem gelöst, allerdings brauche ich noch einen Befehl oder eine Einstellung, dass dieses Script immer abgefragt wird, wenn ich ein Display anschließe dkann mir da jemand noch helfen? Das ist der code, den ich bis jetzt habe:
| #!bin/sh
if xrandr | grep "HDMI-0 connected"
then
echo "HDMI-0 is connected"
else
echo "HDMI-0 is not connected"
fi
|
Kann mir auch jemand sagen, wie ich das Thema zu Shell und Programmieren (https://forum.ubuntuusers.de/forum/shell-und-programmieren/) verschieben kann?
|
Kätzchen
Anmeldungsdatum: 1. Mai 2011
Beiträge: 6677
Wohnort: Technische Republik
|
Unterhalb der letzten Antwort auf Melden klicken. den Link unten hinein kopieren und um Verschiebung bitten. Svenum schrieb:
(https://forum.ubuntuusers.de/forum/shell-und-programmieren/)
|
Svenum
(Themenstarter)
Anmeldungsdatum: 1. August 2018
Beiträge: 27
|
Hallo,
ich versuche ein Script zu schreiben das automatisch startet, wenn ein HDMI (HDMI-0) angeschlossen wird. Ist das möglich und wenn ja, wie? Das Script:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | #!/bin/sh
# Bedingung
if xrandr | grep "HDMI-0 connected"
then
# Bildschirmen Format zuweisen
xrandr --output DP-1 --mode 1920x1080 #Second-Screen
xrandr --output DVI-D-0 --mode 1920x1080 #Main-Screen
xrandr --output HDMI-0 --mode 1920x1080 #Graphictablet
# Graphictablet unter Main-Screen verschieben
xrandr --output HDMI-0 --below DVI-D-0
# Second-Screen neben Main-Screen verschieben
xrandr --output DP-1 --right-of DVI-D-0
# Main-Screen auf Graphictablet Spiegeln
xrandr --output HDMI-0 --same-as DVI-D-0
# Start des Pentabletdriver
sudo sh /home/sven/Linux_Pentablet/Pentablet_Driver.sh
else
exit
fi
# Bildschirme richtig anordnen
xrandr --output DP-1 --right-of DVI-D-0
xrandr --output HDMI-0 --right-of DP-1
exit
|
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Lass dir in einem Terminal mal eventuell vorhandene Udev-Events anzeigen, während du Bildschirme ein- bzw. abstöpselst:
udevadm monitor --environment --udev
Wenn es da eindeutig Events gibt, könne man eine Udev-Regel schreiben, die das Skript aufruft.
|
dirkolus
Anmeldungsdatum: 17. Mai 2011
Beiträge: 1999
Wohnort: dahoam
|
Das hier https://unix.stackexchange.com/questions/4489/a-tool-for-automatically-applying-randr-configuration-when-external-display-is-p ist zugegebenermaßen die Holzhammer-Methode (Script im Autostart, das im 1s Abstand xrandr aufruft), wäre aber für den einen oder anderen eine Lösung. Ich hatte mein Syslog mal nach Udev-Einträgen zum Monitor abgefragt, leider vergeblich (Monitor wird halt meistens über den XServer gemanaged). Aber zumindest unter KDE gibt es ein Bündel an D-Bus-Einträgen, mal schauen, ob man hier ein Event auswerten kann ...
|
dirkolus
Anmeldungsdatum: 17. Mai 2011
Beiträge: 1999
Wohnort: dahoam
|
dirkolus schrieb: Ich hatte mein Syslog mal nach Udev-Einträgen zum Monitor abgefragt, leider vergeblich (Monitor wird halt meistens über den XServer gemanaged).
Hach! Guck an! Der Monitor wird doch über Udev erkannt: :~$ udevadm monitor --environment --udev
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
UDEV [5390.847902] change /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm)
ACTION=change
DEVLINKS=/dev/dri/by-path/pci-0000:01:00.0-card
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_01_00_0
ID_PATH=pci-0000:01:00.0
ID_PATH_TAG=pci-0000_01_00_0
MAJOR=226
MINOR=0
SEQNUM=3502
SUBSYSTEM=drm
TAGS=:seat:master-of-seat:uaccess:
USEC_INITIALIZED=2946548 Udevmonitor wirft also beim wieder-einstecken die obige Meldung aus.
Wobei ... das war jetzt mein primärer Moni (und ich habe nur einen!). @Svenum, jetzt selbst ausprobieren, nach udev ein Script bauen, das Dein Script aufruft und fertig ist die eventbasierte Monitor-Erkennung.
|
Svenum
(Themenstarter)
Anmeldungsdatum: 1. August 2018
Beiträge: 27
|
Hallo, ich versuche ein Script zu schreiben das automatisch startet, wenn ein HDMI (HDMI-0) angeschlossen wird. Ist das möglich und wenn ja, wie? Das Script: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | #!/bin/sh
# Bedingung
if xrandr | grep "HDMI-0 connected"
then
# Bildschirmen Format zuweisen
xrandr --output DP-1 --mode 1920x1080 #Second-Screen
xrandr --output DVI-D-0 --mode 1920x1080 #Main-Screen
xrandr --output HDMI-0 --mode 1920x1080 #Graphictablet
# Graphictablet unter Main-Screen verschieben
xrandr --output HDMI-0 --below DVI-D-0
# Second-Screen neben Main-Screen verschieben
xrandr --output DP-1 --right-of DVI-D-0
# Main-Screen auf Graphictablet Spiegeln
xrandr --output HDMI-0 --same-as DVI-D-0
# Start des Pentabletdriver
sudo sh /home/sven/Linux_Pentablet/Pentablet_Driver.sh
else
exit
fi
# Bildschirme richtig anordnen
xrandr --output DP-1 --right-of DVI-D-0
xrandr --output HDMI-0 --right-of DP-1
exit
|
|
Svenum
(Themenstarter)
Anmeldungsdatum: 1. August 2018
Beiträge: 27
|
seahawk1986 schrieb: Lass dir in einem Terminal mal eventuell vorhandene Udev-Events anzeigen, während du Bildschirme ein- bzw. abstöpselst:
udevadm monitor --environment --udev
Wenn es da eindeutig Events gibt, könne man eine Udev-Regel schreiben, die das Skript aufruft.
Ich werde es morgen sofort ausprobieren. Ein Output kommt aber wenn ich das Tablet anschließe.
Danke schon mal Viel Grüße Svenum
|
Svenum
(Themenstarter)
Anmeldungsdatum: 1. August 2018
Beiträge: 27
|
seahawk1986 schrieb:
Lass dir in einem Terminal mal eventuell vorhandene Udev-Events anzeigen, während du Bildschirme ein- bzw. abstöpselst:
udevadm monitor --environment --udev
Wenn es da eindeutig Events gibt, könne man eine Udev-Regel schreiben, die das Skript aufruft.
Ich habe es ausprbiert, jedoch werden bei mir nur die usb-ports erkannt und nicht die Display-Stecker. Ich habe es auch mal mit VGA, DP und HDMI versucht. Keiner der Stecker wurder erkannt. Weiß jemand wie ich das lösen kann?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
So viele Möglichkeiten gibt es ja nicht:
Den freien noveau-Treiber nutzen (macht mit einer GTX 1050 Ti vermutlich wenig Spaß), dann sollte es udev-Events geben in einer Endlosschleife regelmäßig mit xrandr (oder die C-API des nvidia-Treiber) abfragen, welche Monitore angeschlossen sind Über eine xorg.conf eine statische Display-Konfiguration vorgeben, so dass die Monitore immer konfiguriert sind (Nachteil: erhöht Energiebedarf, macht eher mit Tiling-Window-Managern wie i3 als mit GNOME Sinn) Das Skript auf einen Hotkey oder Starter legen und bei Bedarf ausführen, nachdem du Monitore an- oder abgesteckt hast
Die letzte Variante halte ich für die praktikabelste, auch wenn sie nicht vollautomatisch ist.
|