Wie stelle ich die Bildschirmauflösung für ein bestimmtes Programm ein?

8

Ich verwende Ubuntu 14.04 und möchte ein bestimmtes Programm zwingen, mit einer vorgegebenen Bildschirmauflösung ausgeführt zu werden, und den Bildschirm nach dem Schließen des Programms auf meine Standardauflösung zurücksetzen. Das Programm ist der Texteditor für Klammern, und der Erweiterungsmanager wird nicht vollständig angezeigt, wenn ich Klammern mit 1024 * 768 ausführe (siehe Abbildung unten).

Der Erweiterungsmanager wurde aufgrund der Bildschirmauflösung abgeschnitten

Es zeigt sich gut bei 1280 * 1024, ist aber für meine Augen sehr unangenehm.

Hier ist meine xrandrBefehlsausgabe:

Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
VGA1 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 340mm x 255mm   
   1600x1200      74.8      
   1280x1024      85.0     75.0      
   1024x768       85.0     75.1*    70.1     60.0      
   1024x768i      87.1     
   832x624        74.6      
   800x600        85.1     72.2     75.0     60.3     56.2      
   640x480        85.0     75.0     72.8     66.7     60.0               
   720x400        87.8     70.1   
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
Misho21
quelle
Bitte erläutern Sie den Fall ausführlicher. Warum müssen Sie das tun?
Sh1d0w
1
Können Sie das betreffende Programm, die Ausgabe xrandrund die gewünschte Auflösung erwähnen ?
Jacob Vlijm
Habe gerade meine Frage bearbeitet!
Misho21
Ich weiß, dass Klammern hauptsächlich mit HTML und CSS erstellt werden. Wenn ich nur den Code hacken und bearbeiten kann, ist dies eine andere Möglichkeit, aber ich weiß nicht, wie ich anfangen soll
Misho21

Antworten:

5

Sie können das folgende Python-Skript verwenden, um Ihre Anwendung mit einer bestimmten Auflösung zu starten:

#!/usr/bin/env python3

import argparse
import re
import subprocess
import sys

parser = argparse.ArgumentParser()
parser.add_argument('--output', required=True)
parser.add_argument('--resolution', required=True)
parser.add_argument('APP')
args = parser.parse_args()

device_context = ''    # track what device's modes we are looking at
modes = []             # keep track of all the devices and modes discovered
current_modes = []     # remember the user's current settings

# Run xrandr and ask it what devices and modes are supported
xrandrinfo = subprocess.Popen('xrandr -q', shell=True, stdout=subprocess.PIPE)
output = xrandrinfo.communicate()[0].decode().split('\n')

for line in output:
    # luckily the various data from xrandr are separated by whitespace...
    foo = line.split()

    # Check to see if the second word in the line indicates a new context
    #  -- if so, keep track of the context of the device we're seeing
    if len(foo) >= 2:  # throw out any weirdly formatted lines
        if foo[1] == 'disconnected':
            # we have a new context, but it should be ignored
            device_context = ''
        if foo[1] == 'connected':
            # we have a new context that we want to test
            device_context = foo[0]
        elif device_context != '':  # we've previously seen a 'connected' dev
            # mode names seem to always be of the format [horiz]x[vert]
            # (there can be non-mode information inside of a device context!)
            if foo[0].find('x') != -1:
                modes.append((device_context, foo[0]))
            # we also want to remember what the current mode is, which xrandr
            # marks with a '*' character, so we can set things back the way
            # we found them at the end:
            if line.find('*') != -1:
                current_modes.append((device_context, foo[0]))

for mode in modes:
    if args.output == mode[0] and args.resolution == mode[1]:
        cmd = 'xrandr --output ' + mode[0] + ' --mode ' + mode[1]
        subprocess.call(cmd, shell=True)
        break
else:
    print('Unable to set mode ' + args.resolution + ' for output ' + args.output)
    sys.exit(1)

subprocess.call(args.APP, shell=True)

# Put things back the way we found them
for mode in current_modes:
    cmd = 'xrandr --output ' + mode[0] + ' --mode ' + mode[1]
    subprocess.call(cmd, shell=True)

Speichern Sie das obige Skript (z. B. als my-script.py) und machen Sie es ausführbar:

chmod +x my-script.py

Um eine Auflösung von festzulegen 1280x1024und zu starten, geben Sie gediteinfach Folgendes ein:

./my_script.py --output VGA1 --resolution 1280x1024 gedit

Um zu vermeiden, dass dieser Befehl jedes Mal eingegeben wird, speichern Sie das Skript in Ihrem Home-Verzeichnis und fügen Sie die folgenden Zeilen hinzu .bashrc:

alias my_bracket='~/my_script.py --output VGA1 --resolution 1280x1024 gedit'

Oder noch besser, ändern Sie die Desktop-Datei, in der das Paket installiert ist /usr/local/share/applications/brackets.desktop.

sudo gedit /usr/local/share/applications/brackets.desktop

Und ersetzen Sie den Dateiinhalt durch die folgenden neuen Zeilen:

[Desktop Entry]
Name=Brackets
Type=Application
Categories=Development
Exec=/home/mushir/my_script.py --output VGA1 --resolution=1280x1024 /opt/brackets/brackets
Icon=brackets
MimeType=text/html;
Keywords=Text;Editor;Write;Web;Development;

Quelle: Kontrollkästchen xrandr_cycle-Skript

Sylvain Pineau
quelle
danke .. aber es gibt zwei Probleme mit diesem Skript: Jedes Mal, wenn ich diesen Befehl ausführen muss und dies für mich nicht sehr praktisch ist und nachdem ich das Programm geschlossen habe, kehrt mein Bildschirm nicht automatisch zur Standardauflösung zurück
Misho21
@ Misho21: Ich habe das Problem mit der Wiederherstellung der Einstellungen behoben
Sylvain Pineau
1
danke jetzt funktioniert es! Ich frage mich, ob es nicht möglich ist, dieses Skript jedes Mal automatisch zu starten, wenn ich das Programm ausführe, damit es nicht jedes Mal vom Terminal aus ausgeführt werden muss.
Misho21
1
@ Misho21: Vergessen Sie das (Heim-) .bashrcUpdate und bevorzugen Sie das, .desktopwenn Sie nicht bracketsvon einem Terminal starten
Sylvain Pineau
1
@ Misho21: Sie können nicht, Plymouth arbeitet früher im Startvorgang und verwendet eigene Konfigurationsdateien.
Sylvain Pineau
0

Verwenden Sie hier kein Ubuntu (Gentoo-Person), sondern suchen Sie nach dem Paket xrandr. Normalerweise können Sie Dinge wie verwenden

xrandr --output VGA-1 --mode 640x480

Auflösung zu ändern und

xrandr --output VGA-1 --preferred

bringt Sie zurück zur Standardauflösung.

xrandr

Ohne Optionen erhalten Sie Anzeigenamen und Auflösungen.

Ich habe gerade gesehen, dass die vorherige Skriptversion auch xrandr verwendet :). Aber vielleicht finden Sie die Informationen trotzdem nützlich. Lesen Sie die Handbuchseiten, um Optionen zu optimieren

man xrandr
k9dog
quelle