Estoy trabajando en el desarrollo de una aplicación Python para Ubuntu que permite al usuario tener la resolución deseada sin necesidad de controladores de gráficos.
Para hacer esto, he estado usando xrandr
, que hasta ahora ha sido bastante útil
Sin embargo, ahora tengo un problema; ¿Cómo puedo detectar el nombre del monitor? Tenía la intención de usar un comando de terminal a través de os.system
, modificando la salida del terminal para obtener la salida del monitor requerida y luego almacenándola dentro del programa. Desafortunadamente, a pesar de mucho buscar, no he podido averiguar cómo puedo hacer esto.
¿Hay alguna forma en que pueda hacer esto?
Para resumir:Estoy buscando un comando de terminal que me dé el nombre del monitor, como VGA1
o DVI-0
Respuesta aceptada:
No estoy seguro de cómo lo va a aplicar en su aplicación ("permitir que un usuario tenga la resolución deseada sin necesidad de controladores de gráficos" ?), pero:
Un comando de terminal para enumerar las pantallas conectadas
xrandr | grep " connected " | awk '{ print$1 }'
Esto le dará las pantallas conectadas para su posterior procesamiento, como:
VGA-0
DVI-I-1
Dado que menciona Python, el fragmento a continuación también enumerará las pantallas conectadas:
#!/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())
Esto también le dará las pantallas conectadas, como:
['VGA-0', 'DVI-I-1']
Nota
Tenga en cuenta los espacios alrededor de " connected "
en la cadena buscada. Son necesarios para evitar discrepancias con disconnected
.
EDITAR 2019
Usando python, no es necesario usar xrandr
o cualquier otra llamada del sistema en absoluto. Mejor usa 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)
Salida de ejemplo:
[['eDP-1', 0, 0, 3840, 2160], ['DP-2', 3840, 562, 1680, 1050]]
Dependiendo de la información deseada, puede hacer su elección desde https://lazka.github.io/pgi-docs/Gdk-3.0/classes/Monitor.html