Sto lavorando allo sviluppo di un'applicazione Python per Ubuntu che consenta a un utente di avere la risoluzione desiderata senza richiedere driver grafici.
Per fare questo ho usato xrandr
, che finora è stato piuttosto utile
Tuttavia, ora ho un problema; come posso rilevare il nome del monitor? Avevo intenzione di usare un comando da terminale tramite os.system
, modificando l'output del terminale per ottenere l'output del monitor richiesto e quindi memorizzandolo all'interno del programma. Sfortunatamente, nonostante molte ricerche, non sono stato in grado di scoprire come posso farlo.
C'è un modo in cui posso farlo?
Per riassumere:Sto cercando un comando da terminale che mi dia il nome del monitor, ad esempio VGA1
o DVI-0
Risposta accettata:
Non sono sicuro di come lo applicherai nella tua applicazione ("consenti a un utente di avere la risoluzione desiderata senza richiedere driver grafici" ?), ma:
Un comando da terminale per elencare gli schermi collegati
xrandr | grep " connected " | awk '{ print$1 }'
Questo ti darà gli schermi collegati per ulteriori elaborazioni, come:
VGA-0
DVI-I-1
Dato che menzioni python, lo snippet di seguito elencherà anche gli schermi collegati:
#!/usr/bin/env python3
import subprocess
def screens():
output = [l for l in subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()]
return [l.split()[0] for l in output if " connected " in l]
print(screens())
Questo ti darà anche gli schermi collegati, come:
['VGA-0', 'DVI-I-1']
Nota
Nota gli spazi intorno a " connected "
nella stringa cercata. Sono necessari per evitare discrepanze con disconnected
.
MODIFICA 2019
Usando python, non è necessario usare xrandr
o qualsiasi altra chiamata di sistema. Meglio usare Gdk:
#!/usr/bin/env python3
import gi
gi.require_version("Gdk", "3.0")
from gi.repository import Gdk
allmonitors = []
gdkdsp = Gdk.Display.get_default()
for i in range(gdkdsp.get_n_monitors()):
monitor = gdkdsp.get_monitor(i)
scale = monitor.get_scale_factor()
geo = monitor.get_geometry()
allmonitors.append([
monitor.get_model()] + [n * scale for n in [
geo.x, geo.y, geo.width, geo.height
]
])
print(allmonitors)
Esempio di output:
[['eDP-1', 0, 0, 3840, 2160], ['DP-2', 3840, 562, 1680, 1050]]
A seconda delle informazioni desiderate, puoi scegliere da https://lazka.github.io/pgi-docs/Gdk-3.0/classes/Monitor.html