Comment définir la résolution d'écran pour un programme spécifique?

8

J'utilise Ubuntu 14.04 et je souhaite forcer un programme spécifique à s'exécuter à une résolution d'écran prédéterminée et que l'écran revienne à ma résolution par défaut après la fermeture du programme. Le programme est l' éditeur de texte Brackets et le gestionnaire d'extensions ne s'affiche pas complètement lorsque j'exécute Brackets à 1024 * 768, comme indiqué ci-dessous dans l'image.

Gestionnaire d'extensions tronqué en raison de la résolution d'écran

Il affiche bien à 1280 * 1024 mais il est très inconfortable à mes yeux.

Voici ma xrandrsortie de commande:

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
la source
Veuillez expliquer avec plus de détails le cas, pourquoi avez-vous besoin de le faire?
Sh1d0w
1
pourriez-vous mentionner le programme en question, la sortie xrandret la résolution souhaitée?
Jacob Vlijm
Je viens de modifier ma question!
Misho21
Je sais que les crochets sont construits principalement avec html et css .. si seulement je peux pirater le code et le modifier, ce sera une autre façon de le faire mais je ne sais pas comment commencer
Misho21

Réponses:

5

Vous pouvez utiliser le script python suivant pour démarrer votre application à une résolution donnée:

#!/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)

Enregistrez le script ci-dessus (par exemple sous my-script.py) et rendez-le exécutable:

chmod +x my-script.py

Pour définir une résolution 1280x1024et commencer, gedittapez simplement:

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

Pour éviter de taper cette commande à chaque fois, enregistrez le script dans votre répertoire personnel et ajoutez les lignes suivantes à votre .bashrc:

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

Ou encore mieux, modifiez le fichier de bureau dans lequel le package est installé /usr/local/share/applications/brackets.desktop.

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

Et remplacez le contenu du fichier par les nouvelles lignes ci-dessous:

[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;

Source: script Checkbox xrandr_cycle

Sylvain Pineau
la source
merci .. mais il y a deux problèmes avec ce script: chaque fois que j'ai besoin d'exécuter cette commande et ce n'est pas très pratique pour moi et après avoir fermé le programme, mon écran ne revient pas automatiquement à la résolution par défaut
Misho21
@ Misho21: J'ai corrigé le problème de récupération des paramètres
Sylvain Pineau
1
merci maintenant ça marche! Je me demande s'il y a loin pour démarrer ce script automatiquement à chaque fois que j'exécute le programme, il ne sera donc pas nécessaire de l'exécuter à partir du terminal à chaque fois?
Misho21
1
@ Misho21: Oubliez la .bashrcmise à jour (à la maison) et préférez le .desktopsi vous ne partez pas bracketsd'un terminal
Sylvain Pineau
1
@ Misho21: Vous ne pouvez pas, plymouth opère plus tôt dans le processus de démarrage et utilise ses propres fichiers de configuration.
Sylvain Pineau
0

N'utilisez pas ubuntu ici (Gentoo person), mais recherchez le paquet xrandr. Habituellement, vous pouvez utiliser des choses comme

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

pour changer la résolution et

xrandr --output VGA-1 --preferred

vous ramènera à la résolution par défaut.

xrandr

sans options vous donnera des noms d'affichage et des résolutions.

Je viens de voir que la version précédente du script utilise également xrandr :). Mais peut-être pouvez-vous toujours trouver les informations utiles. Lisez les pages de manuel pour peaufiner les options

man xrandr
k9dog
la source