Como posso listar o (s) monitor (es) conectado (s) com o xrandr?

3

Estou trabalhando no desenvolvimento de um aplicativo python para o Ubuntu que permite que um usuário tenha sua resolução desejada sem exigir drivers gráficos.
A fim de fazer isso eu tenho usado xrandr , que até agora, tem sido bastante útil

No entanto, agora tenho um problema; Como posso detectar o nome do monitor? Eu estava pretendendo usar um comando de terminal através de os.system , modificando a saída do terminal para obter a saída de monitor necessária e, em seguida, armazenando-a dentro do programa. Infelizmente, apesar de muita pesquisa, não consegui descobrir como posso fazer isso.

Existe alguma maneira de fazer isso?

Para resumir: Estou procurando um comando de terminal que me forneça o nome do monitor, como VGA1 ou DVI-0

    
por DevRobot 22.06.2015 / 14:06

3 respostas

2

Não tenho certeza de como você aplicará isso em seu aplicativo ( "permite que um usuário tenha a resolução desejada sem exigir drivers gráficos" ?), mas:

Um comando de terminal para listar telas conectadas

xrandr | grep " connected " | awk '{ print }'

Isso fornecerá as telas conectadas para processamento adicional, como:

VGA-0
DVI-I-1

Como você mencionou python, o snippet abaixo também listará as telas 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())

Isso também lhe dará as telas conectadas, como:

['VGA-0', 'DVI-I-1']

Nota

Observe os espaços em torno de " connected " na string pesquisada. Eles são necessários para evitar incompatibilidades com disconnected .

    
por Jacob Vlijm 22.06.2015 / 14:17
3

Você pode usar python e apenas python para obter os nomes dos monitores conectados:

$ python3 -c 'from gi.repository import Gdk; screen=Gdk.Screen.get_default(); \
[print(screen.get_monitor_plug_name(i)) for i in range(screen.get_n_monitors())]'
DP1
LVDS1
    
por Sylvain Pineau 22.06.2015 / 20:58
0

Você pode usar o comando bash com popen:

import os
    list_display = os.popen("xrandr --listmonitors | grep '*' | awk {'print '}").read().splitlines()
    
por Antoine Boucher 24.06.2018 / 06:12