staging.inyokaproject.org

If Anweisung ausführen wenn Display Port angeschlossen ist

Status: Gelöst | Ubuntu-Version: Ubuntu 18.10 (Cosmic Cuttlefish)
Antworten |

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?

Moderiert von ChickenLipsRfun2eat:

Thema auf Wunsch des TE verschoben.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

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:

1
2
3
4
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

Avatar von Kätzchen

Anmeldungsdatum:
1. Mai 2011

Beiträge: 7130

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: 2180

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:

1
2
3
4
5
6
7
#!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

Avatar von Kätzchen

Anmeldungsdatum:
1. Mai 2011

Beiträge: 7130

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

Moderiert von ChickenLipsRfun2eat:

Threads vereint.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

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: 2180

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: 2180

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

Moderiert von ChickenLipsRfun2eat:

An bestehenden Thread zum Thema angehaengt.

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: 11278

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.

Antworten |