Я использую Ubuntu и хочу узнать количество подключенных дисплеев, их текущее разрешение и, если возможно, их положение относительно друг друга.
Потому что мне не нравится парсинг вывода консоли xrandr - по крайней мере, если нет, - я бы хотел сделать это с Python-XLib или аналогичным подходом Pythonic.
Это вывод xrandr для моей конфигурации дисплея:
$ 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
Я хочу получить эти значения с помощью Python следующим образом:
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
При попытке получить информацию через Python-XLib (или другие библиотеки, такие как pyGTK и pygame), кажется, что все дисплеи всегда обрабатываются как один дисплей. Например, вот что я получил с 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 в Python:
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
Но, как я уже сказал, я бы предпочел более чистый подход без разбора выходных данных консоли.
Неужели нет способа получить (подробное) отображение информации с помощью Python, не анализируя вывод xrandr?