Bagaimana cara mengatur resolusi layar untuk program tertentu?

8

Saya menggunakan Ubuntu 14.04 dan saya ingin memaksa program tertentu untuk berjalan pada resolusi layar yang telah ditentukan dan memiliki layar kembali ke resolusi default saya setelah menutup program. Program ini adalah editor teks kurung dan manajer ekstensi tidak ditampilkan sepenuhnya ketika saya menjalankan kurung di 1024 * 768, seperti yang terlihat di bawah ini dalam gambar.

Manajer ekstensi terpotong karena resolusi layar

Ini ditampilkan dengan baik pada 1280 * 1024 tetapi sangat tidak nyaman bagi mata saya.

Ini adalah xrandroutput perintah saya :

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
sumber
Tolong jelaskan dengan lebih detail kasusnya, mengapa Anda perlu melakukan itu?
Sh1d0w
1
dapatkah Anda menyebutkan program yang dimaksud, keluaran xrandrdan resolusi yang diinginkan?
Jacob Vlijm
Baru saja mengedit pertanyaan saya!
Misho21
Saya tahu bahwa tanda kurung dibangun terutama dengan html dan css .. jika saja saya dapat meretas kode dan mengeditnya, itu akan menjadi cara lain untuk melakukannya tetapi saya tidak tahu bagaimana memulainya
Misho21

Jawaban:

5

Anda dapat menggunakan skrip python berikut untuk memulai aplikasi Anda pada resolusi yang diberikan:

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

Simpan skrip di atas (mis. Sebagai my-script.py) dan membuatnya dapat dieksekusi:

chmod +x my-script.py

Untuk mengatur resolusi 1280x1024dan mulai geditketik saja:

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

Untuk menghindari mengetik perintah ini setiap kali, simpan skrip di direktori home Anda dan tambahkan baris berikut ke Anda .bashrc:

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

Atau bahkan lebih baik lagi, modifikasi file desktop yang menginstal paket /usr/local/share/applications/brackets.desktop.

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

Dan ganti konten file dengan baris baru di bawah ini:

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

Sumber: Kotak centang skrip xrandr_cycle

Sylvain Pineau
sumber
terima kasih .. tetapi ada dua masalah tentang skrip ini: setiap kali saya perlu menjalankan perintah ini dan ini tidak terlalu nyaman bagi saya dan setelah saya menutup program layar saya tidak kembali secara otomatis ke resolusi default
Misho21
@ Misho21: Saya telah memperbaiki masalah pemulihan pengaturan
Sylvain Pineau
1
terima kasih sekarang ini berfungsi! Saya ingin tahu apakah ada jauh untuk memulai skrip ini secara otomatis setiap kali saya menjalankan program sehingga tidak perlu untuk menjalankannya dari terminal setiap kali?
Misho21
1
@ Misho21: Lupakan .bashrcpembaruan (rumah) dan lebih suka .desktopjika Anda tidak memulai bracketsdari terminal
Sylvain Pineau
1
@ Misho21: Anda tidak bisa, plymouth beroperasi lebih awal dalam proses boot dan menggunakan file konfigurasi sendiri.
Sylvain Pineau
0

Tidak menggunakan ubuntu di sini (Gentoo person), tetapi cari paket xrandr. Biasanya Anda bisa menggunakan hal-hal seperti

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

untuk mengubah resolusi dan

xrandr --output VGA-1 --preferred

akan mengembalikan Anda ke resolusi default.

xrandr

tanpa opsi akan memberi Anda nama tampilan dan resolusi.

Hanya melihat versi skrip sebelumnya juga menggunakan xrandr :). Tetapi mungkin Anda masih dapat menemukan informasi yang bermanfaat. Baca di halaman manual untuk opsi tweaking

man xrandr
k9dog
sumber