如何为特定程序设置屏幕分辨率?


8

我正在使用Ubuntu 14.04,并且希望强制特定程序以预定的屏幕分辨率运行,并在关闭程序后使屏幕返回到默认分辨率。该程序是Brackets文本编辑器,当我以1024 * 768运行Brackets时,扩展管理器没有完全显示,如下图所示。

扩展程序管理器由于屏幕分辨率而被截断

在1280 * 1024分辨率下显示效果很好,但是我的眼睛非常不舒服。

这是我的xrandr命令输出:

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)

请更详细地说明这种情况,为什么需要这样做?
Sh1d0w 2015年

1
您能否提及有问题的程序,输出xrandr和所需的分辨率?
Jacob Vlijm

刚刚编辑了我的问题!
Misho21 2015年

我知道方括号主要是用html和css构建的..如果我能破解代码并对其进行编辑,那将是另一种方法,但我不知道如何开始
Misho21

Answers:


5

您可以使用以下python脚本以给定的分辨率启动应用程序:

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

保存以上脚本(例如,作为my-script.py)并使其可执行:

chmod +x my-script.py

要设置分辨率1280x1024并开始gedit键入:

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

为避免每次都键入此命令,请将脚本保存在主目录中,并将以下行添加到您的.bashrc

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

甚至更好的是,修改软件包安装在其中的桌面文件/usr/local/share/applications/brackets.desktop

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

并用以下新行替换文件内容:

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

来源:复选框xrandr_cycle脚本


谢谢..但是此脚本有两个问题:每次我需要运行此命令时,这对我来说都不是很方便,并且在关闭程序后,屏幕不会自动返回到默认分辨率
Misho21

@ Misho21:我已经解决了设置恢复问题
Sylvain Pineau,

1
谢谢,现在工作了!我想知道是否每次我运行该程序时都可以自动启动该脚本,这样就不必每次都从终端运行它了吗?
Misho21 2015年

1
@ Misho21:如果您不是从航站楼出发,请忘记(家庭) .bashrc更新, .desktop而是选择brackets
Sylvain Pineau,2015年

1
@ Misho21:不能,普利茅斯在启动过程中会更早运行,并使用它自己的配置文件。
西尔文·皮诺

0

这里不使用ubuntu(Gentoo人员),而是寻找软件包xrandr。通常您可以使用类似

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

更改分辨率并

xrandr --output VGA-1 --preferred

将使您恢复默认分辨率。

xrandr

不带选项的显示名称和分辨率。

刚看到以前的脚本版本也使用xrandr :)。但是也许您仍然可以找到有用的信息。阅读手册页中的选项调整

man xrandr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.