私は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)
次の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;
ここではubuntuを使用していません(Gentooの人)が、パッケージxrandrを探してください。通常、次のようなものを使用できます
xrandr --output VGA-1 --mode 640x480
解像度を変更し、
xrandr --output VGA-1 --preferred
デフォルトの解像度に戻ります。
xrandr
オプションなしでは、表示名と解像度が表示されます。
以前のスクリプトバージョンでもxrandrを使用しているのを見ました:)。しかし、おそらくあなたはまだ有用な情報を見つけることができます。オプションの調整については、マニュアルページを参照してください。
man xrandr