Làm cách nào để đặt độ phân giải màn hình cho một chương trình cụ thể?


8

Tôi đang sử dụng Ubuntu 14.04 và tôi muốn buộc một chương trình cụ thể chạy ở độ phân giải màn hình được xác định trước và để màn hình trở về độ phân giải mặc định của tôi sau khi đóng chương trình. Chương trình là trình soạn thảo văn bản Brackets và trình quản lý tiện ích mở rộng không được hiển thị hoàn toàn khi tôi chạy Chân đế ở 1024 * 768, như trong hình dưới đây.

Trình quản lý tiện ích mở rộng bị cắt do độ phân giải màn hình

Nó hiển thị tốt ở 1280 * 1024 nhưng nó rất khó chịu với mắt tôi.

Đây là xrandrđầu ra lệnh của tôi :

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)

Hãy giải thích chi tiết hơn về trường hợp này, tại sao bạn cần phải làm điều đó?
Sh1d0w

1
bạn có thể đề cập đến chương trình trong câu hỏi, đầu ra xrandrvà độ phân giải mong muốn?
Jacob Vlijm

Chỉ cần chỉnh sửa câu hỏi của tôi!
Misho21

Tôi biết rằng ngoặc được xây dựng chủ yếu bằng html và css .. nếu tôi có thể hack mã và chỉnh sửa nó sẽ là một cách khác để làm điều đó nhưng tôi không biết bắt đầu như thế nào
Misho21

Câu trả lời:


5

Bạn có thể sử dụng tập lệnh python sau để khởi động ứng dụng của mình ở độ phân giải nhất định:

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

Lưu tập lệnh trên (ví dụ như my-script.py) và làm cho tập lệnh thực thi:

chmod +x my-script.py

Để đặt độ phân giải 1280x1024và bắt đầu, geditchỉ cần gõ:

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

Để tránh gõ lệnh này mọi lúc, hãy lưu tập lệnh trong thư mục chính của bạn và thêm các dòng sau vào .bashrc:

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

Hoặc thậm chí tốt hơn, sửa đổi tệp máy tính để bàn mà gói cài đặt /usr/local/share/applications/brackets.desktop.

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

Và thay thế nội dung tập tin bằng các dòng mới dưới đây:

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

Nguồn: Kịch bản hộp kiểm xrandr_ Motorcycle


cảm ơn .. nhưng có hai vấn đề về tập lệnh này: mỗi lần tôi cần chạy lệnh này và điều này không thuận tiện cho tôi và sau khi tôi đóng chương trình, màn hình của tôi không tự động quay trở lại độ phân giải mặc định
Misho21

@ Misho21: Tôi đã khắc phục sự cố khôi phục cài đặt
Sylvain Pineau

1
cảm ơn vì nó đã hoạt động Tôi tự hỏi liệu có cách nào để tự động khởi động tập lệnh này mỗi khi tôi chạy chương trình không nên chạy nó từ thiết bị đầu cuối mỗi lần?
Misho21

1
@ Misho21: Quên .bashrccập nhật (nhà) và thích .desktopnếu bạn không bắt đầu bracketstừ một thiết bị đầu cuối
Sylvain Pineau

1
@ Misho21: Bạn không thể, plymouth hoạt động sớm hơn trong quá trình khởi động và sử dụng các tệp cấu hình của chính nó.
Sylvain Pineau

0

Không sử dụng Ubuntu ở đây (người Gentoo), nhưng hãy tìm gói xrandr. Thông thường bạn có thể sử dụng những thứ như

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

để thay đổi độ phân giải và

xrandr --output VGA-1 --preferred

sẽ đưa bạn trở lại độ phân giải mặc định.

xrandr

không có tùy chọn sẽ cung cấp cho bạn tên hiển thị và độ phân giải.

Chỉ thấy phiên bản script trước cũng sử dụng xrandr :). Nhưng có lẽ bạn vẫn có thể tìm thấy thông tin hữu ích. Đọc trong các trang hướng dẫn để điều chỉnh tùy chọn

man xrandr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.