ฉันจะตั้งค่าความละเอียดหน้าจอสำหรับโปรแกรมเฉพาะได้อย่างไร


8

ฉันใช้ Ubuntu 14.04 และฉันต้องการบังคับให้โปรแกรมเฉพาะทำงานที่ความละเอียดหน้าจอที่กำหนดไว้ล่วงหน้าและให้หน้าจอกลับสู่ความละเอียดเริ่มต้นของฉันหลังจากปิดโปรแกรม โปรแกรมเป็นตัวแก้ไขข้อความของตัวยึดและตัวจัดการส่วนขยายไม่แสดงอย่างสมบูรณ์เมื่อฉันเรียกใช้ตัวยึดที่ 1024 * 768 ตามที่เห็นด้านล่างในรูปภาพ

ผู้จัดการส่วนขยายถูกตัดทอนเนื่องจากความละเอียดหน้าจอ

มันแสดงผลได้ดีที่ 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

1
คุณสามารถพูดถึงโปรแกรมที่เป็นปัญหาผลลัพธ์xrandrและความละเอียดที่ต้องการได้หรือไม่
Jacob Vlijm

เพิ่งแก้ไขคำถามของฉัน!
Misho21

ฉันรู้ว่าส่วนใหญ่เป็นวงเล็บสร้างด้วย html และ css .. ถ้าเพียงแค่ฉันสามารถแฮ็ครหัสและแก้ไขมันจะเป็นอีกวิธีหนึ่งที่จะทำ แต่ฉันไม่รู้วิธีการเริ่มต้น
Misho21

คำตอบ:


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)

บันทึกสคริปต์ด้านบน (เช่น as 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 21

@ Misho21: ฉันได้แก้ไขปัญหาการกู้คืนการตั้งค่า
Sylvain Pineau

1
ขอบคุณตอนนี้มันใช้งานได้! ฉันสงสัยว่าจะมีการเริ่มต้นสคริปต์นี้โดยอัตโนมัติทุกครั้งที่ฉันเรียกใช้โปรแกรมหรือไม่จึงไม่จำเป็นต้องเรียกใช้จากเทอร์มินัลทุกครั้งหรือไม่
Misho21

1
@ Misho21: ลืม.bashrcอัปเดต(home) และเลือก .desktopว่าคุณยังไม่ได้เริ่มต้นbracketsที่เทอร์มินัลหรือไม่
Sylvain Pineau

1
@ Misho21: คุณไม่สามารถทำได้พลีมั ธ ทำงานก่อนหน้านี้ในกระบวนการบูตและใช้ไฟล์การกำหนดค่าของตัวเอง
Sylvain Pineau

0

ไม่ได้ใช้อูบุนตูที่นี่ (คน Gentoo) แต่มองหาแพ็คเกจ xrandr โดยปกติคุณสามารถใช้สิ่งต่าง ๆ เช่น

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

เพื่อเปลี่ยนความละเอียดและ

xrandr --output VGA-1 --preferred

จะนำคุณกลับไปสู่ความละเอียดเริ่มต้น

xrandr

ไม่มีตัวเลือกจะช่วยให้คุณแสดงชื่อและความละเอียด

เพิ่งเห็นเวอร์ชั่นสคริปต์ก่อนหน้านี้ใช้ xrandr :) แต่บางทีคุณยังสามารถหาข้อมูลที่เป็นประโยชน์ได้ อ่านในหน้าคู่มือสำหรับการปรับแต่งตัวเลือก

man xrandr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.