Sono in esecuzione su Ubuntu e voglio ottenere il numero di display collegati, la loro risoluzione corrente e, se possibile, la loro posizione in relazione l'uno con l'altro. Perché non mi piace parsing dell'output di console di xrandr - almeno non se non devo farlo - mi piacerebbe farlo con Python-XLib o un approccio Pythonic simile.Ottieni display count e risoluzione per ogni display in Python senza xrandr
Questa è l'uscita xrandr per la mia esposizione config:
$ 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
voglio ottenere questi valori con Python, in un modo simile a questo:
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
Quando si cerca di avere informazioni tramite Python -XLib (o altre librerie come pyGTK e pygame), sembra che tutti i display siano sempre gestiti come un unico display. Per esempio, questo è quello che ho ottenuto con XLib finora:
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
so come ottenere informazioni di visualizzazione chiamante xrandr entro 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
Ma come ho detto io preferirei un approccio più pulito, senza dover per analizzare l'output della console. Non c'è davvero modo di ottenere informazioni dettagliate (display) con Python senza dover analizzare l'output di xrandr?
ti dispiacerebbe condividere la vostra soluzione pls. – jagguli
Sembra che il collegamento all'esempio sia cambiato. L'ho aggiornato. –
Qualche idea su come ottenere i nomi delle uscite connesse da xilb/xrandr? –