2012-01-02 3 views
10

저는 Ubuntu를 실행 중이며 연결된 디스플레이의 수, 현재 해상도 및 가능하다면 서로 관련하여 위치를 얻고 싶습니다. xrandr의 콘솔 출력을 구문 분석하는 것이 마음에 들지 않으므로 - 적어도 내가 할 필요가 없다면 - 나는 Python-XLib 또는 비슷한 Pythonic 접근 방식을 사용하고 싶습니다.xrandr없이 Python의 각 디스플레이에 대한 디스플레이 카운트와 해상도를 얻으십시오

$ xrandr 
Screen 0: minimum 320 x 200, current 2960 x 1050, maximum 8192 x 8192 
DVI-0 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 473mm x 296mm 
    1680x1050  60.0*+ 
    1400x1050  60.0 
    1280x1024  75.0  60.0 
    1440x900  59.9 
    1280x960  75.0  60.0 
    1152x864  75.0 
    1280x720  75.0 
    1024x768  75.1  70.1  60.0 
    832x624  74.6 
    800x600  72.2  75.0  60.3  56.2 
    640x480  72.8  75.0  66.7  60.0 
    720x400  70.1 
VGA-0 connected 1280x1024+1680+26 (normal left inverted right x axis y axis) 376mm x 301mm 
    1280x1024  60.0 + 75.0* 
    1024x768  75.1  70.1  60.0 
    832x624  74.6 
    800x600  72.2  75.0  60.3  56.2 
    640x480  72.8  75.0  66.7  60.0 
    720x400  70.1 

내가 파이썬이 값을 얻으려면, 방법이 같은 :

내 디스플레이 설정에 대한 xrandr를 출력입니다

displays = get_displays() 
print displays[0].width # out: 1680 
print displays[1].width # out: 1280 
print displays[0].x_position # out: 0 
print displays[1].x_position # out: 1680 

파이썬을 통해 정보를 얻으려고 노력 -XLib (또는 pyGTK와 파이 게임 같은 다른 라이브러리), 모든 디스플레이가 항상 하나의 단일 디스플레이로 처리되는 것 같습니다. 예를 들어이 지금까지 Xlib를 함께 가지고 무엇을 :

import Xlib 
import Xlib.display 

display = Xlib.display.Display(':0') 

print display.screen_count()  # output: 1 
root = display.screen().root 
print root.get_geometry().width  # output: 2960 -> no way to get width of single display? 
print root.get_geometry().height # output: 1050 

는 파이썬에서 xrandr를 호출하는 표시 정보 얻는 방법을 알고

import subprocess 
output = subprocess.Popen('xrandr | grep "\*" | cut -d" " -f4',shell=True, stdout=subprocess.PIPE).communicate()[0] 

displays = output.strip().split('\n') 
for display in displays: 
    values = display.split('x') 
    width = values[0] 
    height = values[1] 
    print "Width:" + width + ",height:" + height 

을하지만 말했듯이 저는 필요없이 청소기 접근 방식을 선호 콘솔 출력을 구문 분석합니다. 실제로 xrandr 출력을 구문 분석 할 필요없이 Python으로 정보를 표시 (세부) 할 수있는 방법이 있습니까?

답변

7

xrandr은 명령 줄에서 "RandR"X11 확장에 액세스하는 클라이언트입니다. Python-Xlib에서 직접 기능에 액세스 할 수 있습니다. Here의 예 (Python-Xlib의 코드에서!).

URL이 다시 변경되는 경우를 대비하여 여기에 표시 모드를 제공하는 최소한의 코드가 있습니다. 창을 생성해야합니다 (크기 등은 문제가되지 않습니다).

from Xlib import X, display 
from Xlib.ext import randr 

d = display.Display() 
s = d.screen() 
window = s.root.create_window(0, 0, 1, 1, 1, s.root_depth) 

그런 다음 화면 리소스를 사용하여 쿼리 할 수 ​​있습니다. OP의 예를 다음 예는 : 내 컴퓨터에서

res = randr.get_screen_resources(window) 
for mode in res.modes: 
    w, h = mode.width, mode.height 
    print "Width: {}, height: {}".format(w, h) 

내가 얻을 :

$ python minimal.py 
Xlib.protocol.request.QueryExtension 
Width: 1600, height: 900 
Width: 1440, height: 900 
Width: 1360, height: 768 
Width: 1360, height: 768 
Width: 1152, height: 864 
Width: 1024, height: 768 
Width: 800, height: 600 
Width: 800, height: 600 
Width: 640, height: 480 
+0

당신은 PLS 솔루션을 공유 될까요. – jagguli

+0

예에 대한 링크가 변경된 것처럼 보입니다. 나는 그것을 업데이트했다. –

+0

xilb/xrandr에서 연결된 출력 이름을 얻는 방법에 대한 아이디어가 있으십니까? –