Externen Bildschirm im laufenden Betrieb an Notebook anstecken

KDE, Gnome, Windowmanager, X11, Grafiktreiber und alles was dazu notwendig ist. Schau auch in den "Tipps und Tricks"-Bereich.
Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Rosenrot » 26.11.2018 21:44:39

Hallo zusammen,
ich habe folgendes Problem:
auf meinem Notebook habe ich ein Debian 9.6 laufen.
Angedacht ist, dieses als eine Art "mobile Workstation" einsetzen zu können. Dazu muss es möglich sein einen externen Bildschirm anzuschließen.
Ich habe das Problem mit xRandR gelöst.
Leider nicht ganz zufriedenstellend.
Momentan wird die richtige Einstellung nur geladen, wenn der Bildschirm beim Start des X-Servers schon in der VGA Buchse steckt. Das ist gut aber noch nicht gut genug.
Ich möchte/muss den Bildschirm im laufenden Betrieb an- und ausstecken können. Dabei muss automatisch zwischen den entsprechenden Einstellungen hin und hergesprungen werden.
Auch wenn das Notebook zugeklappt wird, darf das keinen Einfluss haben.
Zu xRandR habe ich mich eingelesen. Weitere Möglichkeiten kenne ich nicht.
Vielleicht geht das ja auch alles viel effizienter.
Hat jemand einen Tipp für mich?

Lieben Gruß
Rosenrot

DeletedUserReAsG

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von DeletedUserReAsG » 26.11.2018 22:06:58

Du solltest bedenken, dass VGA nicht hotplugfähig ist. Also nicht weinen, wenn was durchknallt.

Ansonsten hängt’s ein wenig vom DE ab. Neuere Versionen von Xfce können Profile vorhalten, zwischen denen man je nach angeschlossenen Monitoren wechseln kann.

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Rosenrot » 26.11.2018 22:38:28

Ohhh, okay. Das ist echt gut zu wissen.
So gesehen ist die Idee auf jeden Fall noch ausbaufähig.
Kaputt machen will ich ja nichts.
Sieht jemand eine andere Möglichkeit meine Idee umzusetzen?
Beziehungsweise, gibt es eine Möglichkeit den VGA-Anschluss eben auch im laufenden Betrieb zu nutzen?
Das das automatisiert läuft habe ich jetzt mal abgehakt.

Ich hab Cinnamon als Desktop.
Allerdings suche ich eine Lösung die von der Oberfläche weitestgehend unabhängig ist.
Eventuell möchte ich irgendwann auch mal wechseln.

Benutzeravatar
TBT
Beiträge: 923
Registriert: 18.06.2003 08:39:36
Kontaktdaten:

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von TBT » 26.11.2018 22:47:58

Interessant wäre der Desktop Manager dazu.

Ich selber fahre KDE, da wird mir im laufenden Betrieb der zweite Monitor per Hotplug
am VGA erkannt und nach der letzten Konfiguration eingehängt, also rechts vom Laptop
Bildschirm mit eigenem Hintergrundbild etc.

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von hikaru » 27.11.2018 09:13:24

Man könnte das so halb automatisieren:
Wenn ein neuer Bildschirm angeschlossen wird, sieht man das für gewöhnlich in der Ausgabe von xrandr (auch bei VGA). Aus dieser Ausgabe könnte man sich eine passende Auflösung holen und dann z.B. über eine Tastenkombination den Bildschirm entsprechend umschalten.
Das An- und Abstöpseln taucht sicher auch in irgendwelchen Logs auf, bzw. erzeugt irgendwelche Signale. Darauf könnte man reagieren und die Sache vielleicht doch vollautomatisch regeln. Während der Rechner schläft kommen solche Signale natürlich nicht an. Man müsste dann nochmal zusätzlich beim Aufwachen prüfen, ob sich was geändert hat.

Für gewöhnlich will man immer die höchste Auflösung haben, die der Monitor kann. Aber das ist nicht immer so. Wenn man z.B. ein 4k-Display an eine GPU anschließt, die das nicht (sinnvoll) kann, dann will man vielleicht eine andere Auflösung (z.B. 1080p) haben.
Auch die Anordnung der Monitore kann variieren. Intels reichlich betagter GMA 950 kann z.B. nur 2048x2048 Pixel ansteuern. Wenn man also z.B. einen Laptop mit 1280x800-Display hat und will zusätzlich einen 1080p-Monitor anschließen, dann geht das nicht nebeneinander sondern nur übereinander.

Alles in Allem sieht mir das nach einem netten Scripting-Projekt aus. Freiwillige vor! ;)

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von MSfree » 27.11.2018 11:03:53

niemand hat geschrieben: ↑ zum Beitrag ↑
26.11.2018 22:06:58
Du solltest bedenken, dass VGA nicht hotplugfähig ist. Also nicht weinen, wenn was durchknallt.
VGA ist zwar nicht unbedingt Plug'n'Play-fähig, es ist aber sehr wohl hotplugfähig. Da knallt gar nichts durch. Seit über die VGA-Schnittstelle EDID-Daten ausgetauscht werden (so ungefähr die letzen 20 jahre also) ist VGA nicht nur hotplugfähig sondern auch in der Regel auch Plug'n'Play-fähig.

Allerdings beschränken sich viele Graphikkarten darauf, nur beim Boot die Monitorausgänge auf angeschlossene Geräte zu untersuchen und ungenutze Ausgänge abzuschalten, so daß man nachträglich angeschlossen Monitore erst nach einem Reboot ansteuern kann.

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Rosenrot » 27.11.2018 11:25:02

Also bei meinem Ausgang wird der Monitor auch im Betrieb erkannt.
Ich hab mir auch schon überlegt wie man das lösen könnte.
Ich dachte an einen Dämon.
Der müsste dauernd die Ausggänge abschecken. Das ist kein Problem und geht mit xRandR.
Da steht dann ein "connect" bzw. "disconnect".

Was meint ihr dazu?
Oder aber ein Script welches dann mit verschiedenen Parametern gefüttert wird.
Die unterschiedlichen Aufrufe sind dann verschiedenen Tastenkombinationen zugeordnet. Das wäre dann die halbautomatische Lösung.

Ich hab gestern noch ein Script geschrieben, welches sofort beim start des X-Servers umschaltet, wohlgemerkt bei bereits angeschlossenem Monitor.
Problem:
Der X-Server friert öffter mal ein.
Liegt es eventuell daran, das mein Script im gestartet wird, bevor der x-Server fertig geladen hat?
Dann würde eine einfache Zeitverzögerung bereits reichen.

Ach so, wenn spezielle Info's gebraucht werden lass ich die auch gerne rüberwachsen.
Nur die Materie ist mir eben sehr neu auf dem Gebiet.
Deswegen weiß ich nicht von mir aus was an Info's sinnvoll ist.

Lieben Gruß
Rosenrot

debianoli
Beiträge: 4068
Registriert: 07.11.2007 13:58:49
Wohnort: Augschburg

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von debianoli » 27.11.2018 11:31:12

Das sollte doch über udev gehen?

Schau dir doch mal sowas in der Art an (nicht getestet):

https://danysk.github.io/information%20 ... iguration/

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von MartinV » 27.11.2018 11:34:11

Ich denke auch an udev. Das arch Wiki hat dazu was: https://wiki.archlinux.org/index.php/Ud ... le_plug_in
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

DeletedUserReAsG

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von DeletedUserReAsG » 27.11.2018 12:19:23

MSfree hat geschrieben: ↑ zum Beitrag ↑
27.11.2018 11:03:53
VGA ist zwar nicht unbedingt Plug'n'Play-fähig, es ist aber sehr wohl hotplugfähig.
Laut Spezifikation eben nicht, soweit mir bekannt und in den üblichen Erstanlaufquellen nachlesbar. Hat schon ’nen Grund, warum Stecker und Buchsen früher fest verschraubt waren. Meistens passiert zwar nix, wenn man’s trotzdem macht, aber unter ungünstigen Umständen ist der Potentialunterschied vielleicht doch mal ausreichend groß, um ein paar dieser winzigen elektronischen Bauteile da zu grillen. Auf diese Möglichkeit wollte ich nur hingewiesen haben. Sorry für OT.

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Lord_Carlos » 27.11.2018 12:44:39

Kann deine Grafischeoberflaeche das nicht alles fuer dich machen?
Dann muesste man das Rad nicht neu erfinden.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Rosenrot » 27.11.2018 13:46:57

Die graphische Oberfläche kann das schon.
Aber eben nicht automatisiert.
Da müsste ich praktisch alles mit der Hand machen.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von MartinV » 27.11.2018 13:59:22

Ich habe für mein Laptop zusätzlich einen VGA-Monitor, den ich nur manchmal einstecke.
Ich nutze Xfce und habe im Panel einen Starter mit diesem Befehl angelegt:

Code: Alles auswählen

xrandr --output VGA-0 --right-of eDP
Nach dem Einstöpseln des Monitors klicke ich auf den Starter, und der VGA-Monitor wird nach Wunsch rechts vom Laptop-Monitor angeordnet.
Beim Abstöpseln des Monitors landen alle Fenster vom VGA-Bildschirm von selbst wieder auf dem Laptop-Bildschirm.

Das ist nur halbautomatisch, aber einfach.

Wie kompliziert ist Dein Wunsch? Müssen verschiedene Arbeitsplätze unterschiedlich gehandhabt werden, oder reicht eine pauschale Lösung für alle VGA-Monitore? Z.B. "VGA immer rechts"?
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Rosenrot » 27.11.2018 14:47:52

Der Bildschirm des Notebooks soll auf den externen Monitor gespiegelt werden.
Da dieser eine höhere Auflösung hat als der Bildschirm des Notebooks, soll ein Nachlaufmodus angestoßen werden.
Außerdem darf das zuklappen des Notebooks nicht zu irgendeiner Aktion führen.
Aber ich glaube das müsste ich dann über die Energieverwaltung regeln.

So gesehen, ist sind meine Wünsche also eigentlich nicht umfangreich.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von MartinV » 27.11.2018 15:17:43

Rosenrot hat geschrieben: ↑ zum Beitrag ↑
27.11.2018 14:47:52
Außerdem darf das zuklappen des Notebooks nicht zu irgendeiner Aktion führen.
Aber ich glaube das müsste ich dann über die Energieverwaltung regeln.
Ja, das ist Sache der Energieverwaltung.
Rosenrot hat geschrieben: ↑ zum Beitrag ↑
27.11.2018 14:47:52
Der Bildschirm des Notebooks soll auf den externen Monitor gespiegelt werden.
Da dieser eine höhere Auflösung hat als der Bildschirm des Notebooks, soll ein Nachlaufmodus angestoßen werden.
Dafür hast Du bereits ein funktionierendes Skript, und für das "Normalstellen" des Laptops nach Abstöpseln auch?
Dann ist eine Lösung mit zwei Panel-Startern für diese beiden Skripte am einfachsten, wenn auch nur halbautomatisch. Welchen Desktop benutzt Du?

Wenn Du es mehr automatisch haben willst, starte das Skript nach dem udev-Beispiel im arch Wiki: https://wiki.archlinux.org/index.php/Ud ... le_plug_in
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Rosenrot » 27.11.2018 15:21:34

Die Skripte erstelle ich mit xRandR.
Ich benutze Cinnamon.
Ich werde es mit udev probieren.
Gelten die udev-Regeln global?

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von MartinV » 27.11.2018 15:31:10

udev-Regeln gelten systemweit.
Sie können sehr allgemein für viele Geräte oder sehr speziell für einzelne Geräte definiert werden.
Das Beispiel vom arch Wiki ist sehr allgemein:

Code: Alles auswählen

KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/usr/bin/arandr"
Ich bin kein udev-Experte und habe es nur halb verstanden. Aber einfache Regeln bekomme ich hin.
In dieser Regel beschreibt KERNEL=="card0" die Grafikkarte, die überwacht werden soll.

card0 wird wahrscheinlich auch für Deinen Laptop so stimmen, außer er hat zwei Grafikkarten, und der VGA-Anschluß ist an der anderen.

Soweit ich das sehe, reagiert die Regel auf beliebige eingestöpselte Monitore.

RUN+="/usr/bin/arandr" sollte auf Dein xrandr-Skript zeigen.

Ich weiß nicht, ob die Regel auch auf Abstöpseln reagiert, oder ob dafür eine weitere Regel erstellt werden muß.
Probier einfach aus. Falls die Regel auf beides reagiert, kannst Du in Deinem Skript die Ausgabe von xrandr überprüfen, ob jetzt ein zweiter Monitor vorhanden ist oder nicht, und das Skript kann entsprechend reagieren.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Rosenrot » 27.11.2018 21:38:26

So, ich hab das mit der udev-Regel jetzt versucht.
Genau genommen habe ich zwei erstellt. Einmal für das einstecken und einmal für das abziehen des Monitors.
Das aktuelle Problem:
Die udev-Regeln werden schlicht nicht geladen. Ich war bis jetzt auf Fehlersuche. Ohne Erfolg.
Einzige Erkenntniss ist, dass die Regel wirklich nicht geladden wurde. Das Skript funktioniert. Das habe ich ausprobiert.
Die Regeln liegen beide in /etc/udec/rules.d

Hat jemand eine Idee?

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von MartinV » 27.11.2018 21:49:43

Kannst Du Deine udev-Regeln und Dein Skript mal hier zeigen?

Es kann auch sein, daß die udev-Regeln zwar geladen und angewendet werden, aber das Skript es nicht schafft, auf den X Server zuzugreifen. Du könntest zur Prüfung DISPLAY und XAUTHORITY von Deinem Skript in eine Datei /tmp/udev.x schreiben und hinterher prüfen, ob die Datei existiert und sinnvollen Inhalt hat.

Auch mußt Du udev oder gleich das ganze System neu starten, damit die udev-Regel gelesen wird.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Rosenrot » 27.11.2018 21:59:35

Gestartet habe ich udev neu.
Ich poste die Sachen morgen. Sonst müsste ich jetzt heute den Notebook noch mal hoch fahren.

Das mit der Ausgabe in eine Datei habe ich versucht.
Da ist keine Datei angelegt worden.

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Rosenrot » 28.11.2018 10:02:28

Hi,
ich hab hier mal mein Skript und die Regeln.

Code: Alles auswählen

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="add", NAME="Monitor",  ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/Persönlicher_Ordner/.Xauthority", RUN+="/Pfad_zum_Skript/Skript.sh"
Ich bin mir nicht sicher ob mein VGA-Ausgang auch wirklich card0 ist. Weiß jemand wie ich es herausfinden kann? Die Pfade, welche ich jetzt hier abstrahiert habe stimmen im Original. Das habe ich mehrfach überprüft. Aber mir fällt jetzt nichts mehr ein was sonst noch falsch liegen könnte.
card0 liegt bei mir in /dev noch einmal im Unterverzeichnis dri.
Also /dev/dri/pfad0
Kann das ein Problem sein?
Die Regel zum entfernen poste ich hier auch mal. Die ist aber auf jeden Fall noch ausbaufähig, weil ich gelesen habe, dass das nicht ganz so einfach sein soll.

Code: Alles auswählen

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/Persönlicher_Ordner/.Xauthority", RUN+="/Pfad_zum_Skript/Skript.sh"
Hier kommt mein Skript:

Code: Alles auswählen

#!/bin/bash

EXTERNAL_OUTPUT="VGA-0"
INTERNAL_OUTPUT="LVDS"

xrandr | grep $EXTERNAL_OUTPUT | grep " connected "

if [ $? -eq 0 ]
then

xrandr --output $INTERNAL_OUTPUT --off
xrandr --output $INTERNAL_OUTPUT --mode 1440x900
xrandr --output $EXTERNAL_OUTPUT --same-as $INTERNAL_OUTPUT
xrandr --output $EXTERNAL_OUTPUT --mode 1680x1050
xrandr --output $INTERNAL_OUTPUT --panning 1680x1050
xrandr --output $EXTERNAL_OUTPUT --fb 1680x1050
else
xrandr --output $EXTERNAL_OUTPUT --off
xrandr --output $INTERNAL_OUTPUT --mode 1440x900
fi  
Ich habe das in so viele Befehle ausgelagert weil es für die Implementierungsphase einfach für alle Beteiligten übersichtlicher ist.
Das --off ist notwendig, weil der Monitor des öffteren im laufenden Zustand einfach nicht mehr reagiert hat.
Schaltet man ihn ab und startet ihn mit anderen Optionen neu gibt es keine Probleme.

Die Stelle mit dem Anlegen der Datei hab ich der Übersicht halber um zu kürzen auch rausgenommen. Bei mir auf der Platte ist sie aber vorhanden.
Ich bin mir sicher irgendwo habe ich was verbockt und hoffe da auf eure Hilfe.
Selber hatte ich mit udev noch nicht wirklich was am Hut.

Lieben Gruß
Rosenrot

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von MSfree » 28.11.2018 10:29:05

Rosenrot hat geschrieben: ↑ zum Beitrag ↑
28.11.2018 10:02:28
Hier kommt mein Skript:...
Udev läuft nicht mit deinen Benutzerrechten und weiß nichts über den X-Server, mit dem du gerade eingelogt bist.

1. Problem:
Der Benutzer, unter dem udev läuft, hat keine Berechtigung, um auf deinen X-Server zuzugreifen. Im Home-Verzeichnis des Benutzers, unter dem der X-Server läuft, gibt es die Datei .Xauthority, die du benutzen mußt, um dich gegen den X-Server zu authentisieren.

2. Problem:
xrandr weiß nicht, welches Display er anfassen soll. Das läßt sich jedoch in der Regel einfach dadurch lösen, indem man die Umgebungfsvariable DISPLAY auf ":0" setzt, welches das Hauptdisplay des Rechners ist.

Dein Skript sollte mit folgenden ergänzungen funktionieren:

Code: Alles auswählen

#!/bin/bash
# Debug code, bitte #-Zeichen der nächsten Zeile entfernen.
# echo "udev Skript gestartet" > /tmp/MeinUdevSkript.out
# hier bitte deinen Benutzernamen eintragen
USER=DeinBenutzerName
# notwendige Umgebungsvariablen setzen
export DISPLAY=:0.0
export XAUTHORITY=~$USER/.Xauthority
# es ist immer eine gute Idee, in Skripten absolute Pfade zu verwenden
XRANDR=/usr/bin/xrandr

EXTERNAL_OUTPUT="VGA-0"
INTERNAL_OUTPUT="LVDS"

$XRANDR | grep $EXTERNAL_OUTPUT | grep " connected "

if [ $? -eq 0 ]
then
  $XRANDR --output $INTERNAL_OUTPUT --off
  $XRANDR --output $INTERNAL_OUTPUT --mode 1440x900
  $XRANDR --output $EXTERNAL_OUTPUT --same-as $INTERNAL_OUTPUT
  $XRANDR --output $EXTERNAL_OUTPUT --mode 1680x1050
  $XRANDR --output $INTERNAL_OUTPUT --panning 1680x1050
  $XRANDR --output $EXTERNAL_OUTPUT --fb 1680x1050
else
  $XRANDR --output $EXTERNAL_OUTPUT --off
  $XRANDR --output $INTERNAL_OUTPUT --mode 1440x900
fi

# Debug code, bitte #-Zeichen der nächsten Zeile entfernen.
# echo "udev Skript beendet" >> /tmp/MeinUdevSkript.out
Mit dem Debugcode sollte unter /tmp die Datei MeinUdevSkript.out entstehen, um zu prüfen, ob des Skript üebrhaupt aktiviert wird.

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Rosenrot » 28.11.2018 10:40:22

Danke dir für deinn Hilfe.
Kurze Frage dazu:
Athentifiziere ich mich nicht bereits in der udev-Regel bei X?
Ich dachte das Skript wird dann einfach unter meinem Nutzer ausgeführt?
Oder liegt es daran, dass die udev-Regeln systemweit gelten?
Also müsste ein anderer Nutzer auch auf das Skript zugreifen können.
Das geht aber momentan nicht so wie ich das gemacht habe.

Bitte nicht missverstehen. Ich zweifle das nicht an. Ich lerne einfach sehr viel durch fragen und danach tun. :D

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von Rosenrot » 28.11.2018 11:16:35

Ich hab das Skript ausprobiert und es läuft schon besser als mein altes.
Beim einstecken des Monitors wird das Skript aufgerufen. Die Regel, welche beim ausstecken des externen Monitors greifen soll tut gar nichts.
Leider führen die Einstellungen im Skript, wenn es in der udev-Regel aufgerufen wird zu etwas vollkommen anderem als wenn ich es manuell aufrufe.
Rufe ich es manuell auf ist alles wie gewünscht.
Bei udev sucht er sich die irrwitzigsten Einstellungen aus. Durchaus dann auch mal mit Abwechslung.
Liegt es vielleicht daran, dass der Monitor beim abziehen nicht richtig "abgemeldet wird" und die alten Einstellungen noch gelten?

Ich denke es liegt daran, dass irgendwo vom System auch noch mal Einstellungen vorgenommen werden.
Und zwar NACHDEM mein Skript aufgerufen wird.
Darauf aufbauend kommt dann halt Mist raus.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Externen Bildschirm im laufenden Betrieb an Notebook anstecken

Beitrag von MSfree » 28.11.2018 11:23:55

Rosenrot hat geschrieben: ↑ zum Beitrag ↑
28.11.2018 10:40:22
Athentifiziere ich mich nicht bereits in der udev-Regel bei X?
Der udev-Dienst ist ein systemweiter Dienst, der von systemd gestartet wird. Von irgendwelchen Logins bekommt der erstmal nichts mit.
Ich dachte das Skript wird dann einfach unter meinem Nutzer ausgeführt?
Das Skript wird unter dem Benutzer ausgeführt, unter dem der udevd läuft. Bei meinem Jessie-Server ist das root.
Also müsste ein anderer Nutzer auch auf das Skript zugreifen können.
Wie gesagt, udev weiß nicht, wer gerade eingelogt ist. Es bekommt lediglich die Information, daß sich die Hardwarekonfiguration geändert hat, (z.B. USB-Sticks eingestöpselt, Monitor angeschlossen,...) Welcher Benutzer dafüt verantwortlich ist, weiß udevd nicht.

Allerdings können sich Desktopumgebungen wie KDE und Gnome mit dem udevd verbinden und sich benachrichtigen lassen, wenn udevd ein Ereignis mitbekommt. Das wäre dann aber eine Indirektion weiter, also system-udevd benachrichtigt den Desktopmanager und der führt dann Aktionen aus.
Das geht aber momentan nicht so wie ich das gemacht habe.
Richtig, das klappt so erstmal nur mit dem Benutzer, den du in das Skript einträgst.

Du kannst natürlich auch einfach mal den Debugcode aktivieren und in der Zeile hinter:

Code: Alles auswählen

echo "udev Skript gestartet" > /tmp/MeinUdevSkript.out
ein

Code: Alles auswählen

echo $USER >> /tmp/MeinUdevSkript.out
einbauen, also bevor

Code: Alles auswählen

USER=DeinBenutzerName
gesetzt wird. Mit ein wenig Glück ist da schon dein Benutzer aktiv, dann erübrigt sich das Setzen der USER-Variable.

Antworten