Wie führst du eine Anwendung in bash aus und wählst aus, auf welchem ​​Monitor sie läuft?

8

Ich habe eine Frage, bei der es schwierig ist, nach der Antwort zu suchen (ich bekomme immer Antworten auf Monitormanipulationen). Ich schreibe ein Bash-Shell-Skript, um mir mit meinem Code-Entwickler zu helfen, und ich habe zwei Monitore.

Wenn ich meine ausführbare Datei ausführe, die ich kompiliert habe, möchte ich sagen, dass sie auf einem bestimmten Monitor läuft (anders als der Monitor, auf dem ich mein Terminal geöffnet habe, damit ich das Debug auf einem Bildschirm sehen kann und die App aktiviert ist ein anderes).

Wie würde ich das machen? Etwas wie:

%Vor%

Wo myProject meine binäre ausführbare Datei ist.

Danke allen.

    
code_fodder 21.08.2013, 14:43
quelle

5 Antworten

7

Wenn Sie auf jedem Monitor separate Anzeigen ausführen (in diesen Tagen weniger wahrscheinlich), ist die Umgebungsvariable DISPLAY das, was Sie wollen.

Wenn Sie Xinerama verwenden (indem Sie eine logische Anzeige über mehrere Monitore verteilen):

  • Beiseite: X11-Vokabular: Ein "Display" ist ein oder mehrere "Bildschirme" mit Eingabegeräten; z.B. Tastatur und Maus, auch als "Sitz" bezeichnet. Ein "Bildschirm" ist eine logische Leinwand, die teilweise oder vollständig auf einem oder mehreren "Monitoren" angezeigt wird. Wenn mehrere Monitore für einen "Bildschirm" verwendet werden, können die Fenster teilweise auf jedem Monitor angezeigt werden, teilen sich jedoch den gleichen X11 DISPLAY Identifier; Dies wird Xinerama genannt. Das Format DISPLAY ist host : Anzeige-Nummer . Bildschirm-ID , also z. Auf meinem Xinerama-Setup sind beide Monitore Teil des Bildschirms 0 auf einer Display-Nummer, die von 0 mit jedem angemeldeten Benutzer auf demselben Host hochzählt. "Sitze" sind logische Gruppen von Monitor + Eingang, die unterschiedliche Hardware verwenden; Mehrere "Anzeigen" können durch den Wechsel der "virtuellen Konsole" erfolgen, so dass Gnome und KDE mehreren Benutzern erlauben, sich auf einer einzelnen "Sitz" -Maschine anzumelden.

Bei den meisten GUI-Toolkits können Sie die Geometrie des Fensters mit dem Schalter --geometry oder -geometry angeben.

  • Qt verwendet das ältere MIT-Format -geometry form. GTK + / Gnome verwendet den GNU-Stil --geometry .

  • Dies setzt voraus, dass Sie Qt erlauben, Ihre Befehlszeile, z. Übergeben von argv in QtApplication oder ähnlich.

Die "logische Anzeige" hat eine Auflösung, die die Summe der Auflösungen in jeder Richtung der Anordnung Ihrer Monitore ist. Zum Beispiel habe ich jetzt 2 × 1920 × 1080-Displays angeschlossen. xrandr meldet:

%Vor%

Um ein Fenster auf dem rechten Monitor anzuzeigen, kann ich einen Geometrie-String angeben, dessen x -Koordinaten zwischen 1920 ... 3839 (einschließlich) liegen.

Das übliche Format ist: width x Höhe ± x-Verschiebung ± y-Verschiebung - aber die Breite und Höhe sind optional, wenn Sie die Standardeinstellungen bevorzugen. Die ± sind + , um relativ zum oberen / linken Wert zu zählen, oder - , um relativ zum unteren / rechten Wert zu zählen.

Also zum Beispiel:

%Vor%

Leider ist der einzige programmatische Weg, den ich kenne, um den Bereich der Anzeige auf jedem Monitor von der Shell aus zu bestimmen, die Ausgabe von xrandr ; z.B.

%Vor%

(Normalerweise möchten Sie den Perl-Einzeiler nicht über zwei Zeilen in der Shell teilen, aber der '\ ... ' -Trick ist, um ihn auf SO lesbar zu machen.)

    
BRFennPocock 21.08.2013, 17:15
quelle
4

Verwende ein fifo

Öffnen Sie ein Terminalfenster auf dem Monitor, auf dem die Ausgabe angezeigt werden soll, und führen Sie

aus %Vor%

dann auf dem Quell-Terminal do

%Vor%

Dies setzt voraus, dass es sich um eine Konsolenanwendung handelt. Wenn es grafisch ist, benötigen Sie einen anderen Ansatz, der davon abhängt, welchen Windowing Manager + Toolkit Sie verwenden.

    
Oliver Matthews 21.08.2013 14:48
quelle
3

Sie müssen lediglich die Umgebungsvariable DISPLAY vor dem Ausführen Ihrer Anwendung festlegen.

Um herauszufinden, wofür Sie es einrichten müssen, führen Sie Folgendes auf dem Monitor aus, auf dem es angezeigt werden soll:

%Vor%

Sie sollten beispielsweise :0.1 oder :0.0 sehen.

Dann können Sie angeben, dass Ihre App auf diesem Bildschirm wie folgt ausgeführt werden soll:

%Vor%     
John Ledbetter 21.08.2013 15:59
quelle
2

Die oben angegebene und akzeptierte Antwort --geometry wird in vielen Fällen nicht funktionieren ...

Es gibt viele fast identische Fragen wie diese, die sich um die verschiedenen StackExchange-Sites & amp; AskUbuntu, die Antwort, die ich schließlich gefunden habe (auf einer Linux Mint-Distribution basierend auf Ubuntu 14.04), ist wmctrl . Ich lasse eine Antwort, nur weil niemand es in diesem Thread erwähnt hat.

(Es gibt ein anderes namens Devil's Pie und ein anderes namens Compiz Wenn du auch nach diesen suchst, findest du die Q & A's, von denen ich rede)

wmctrl ist die Art von einfachem Unix-Tool, das Sie wahrscheinlich suchen, wenn Sie Bash-Skripte schreiben. Ich sah auch jemanden vorschlagen, xdotool zu verwenden, hängt davon ab, was das spezifische Ziel ist.

wmctrl bietet Fensteranpassung nach Fenstertitel oder pid (nicht kompatibel mit allen Arten von X-verwalteten Fenstern)

Einige hilfreiche Ressourcen:

Ich verbinde einen zweiten Monitor auf der linken oder rechten Seite, je nachdem, wo ich jeden Tag arbeite, und ich denke, die Lösung für mich beinhaltet

  • die Dimensionen von xrandr finden (wie in der Antwort von BRPocock gezeigt),
  • Parsing, um zu sagen, welcher der extern angeschlossene Monitor (VGA / HDMI etc.) und nicht der eingebaute Monitor ist,
  • gibt eine Dimension an, die einem maximierten Fenster auf dem verbundenen Bildschirm zugewiesen werden soll (d. h. der Offset links / rechts / oben / unten, der sich je nach Seite des verwendeten Bildschirms ändert)

Nachdem ich meine Notizen und [eventuell] einen Code erstellt habe, hier , falls es nützlich ist an jemand anderen.

    
Louis Maddox 23.06.2016 19:01
quelle
0

Da Ihre Anwendung QT verwendet, verwenden Sie wahrscheinlich KDE. In System Settings > Window Behavior > Advanced , setze Placement auf Under Mouse . Klicken Sie auf den gewünschten Monitor, ALT + Tab, um zu Ihrem Terminal zu wechseln, und starten Sie das Programm.

    
Fabio A. Correa 21.08.2013 15:56
quelle

Tags und Links