web-dev-qa-db-fra.com

Comment puis-je lister les moniteurs connectés avec xrandr?

Je travaille au développement d'une application python pour Ubuntu qui permet à un utilisateur de disposer de la résolution souhaitée sans nécessiter de pilote graphique.
Pour ce faire, j’utilise xrandr, qui jusqu’à présent a été très utile

Cependant, j'ai maintenant un problème; Comment puis-je détecter le nom du moniteur? J'avais l'intention d'utiliser une commande de terminal via os.system, de modifier la sortie du terminal pour obtenir la sortie de moniteur requise, puis de la stocker dans le programme. Malheureusement, malgré beaucoup de recherches, je n’ai pas pu trouver comment faire.

Y a-t-il un moyen de le faire?

Pour résumer: Je cherche une commande de terminal qui me donne le nom du moniteur, tel que VGA1 ou DVI-0

6
TellMeWhy

Je ne sais pas comment vous allez l’appliquer dans votre application ("permettre à un utilisateur d’avoir la résolution souhaitée sans nécessiter de pilote graphique"?), Mais:

Une commande de terminal pour lister les écrans connectés

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

Ceci vous donnera les écrans connectés pour un traitement ultérieur, comme:

VGA-0
DVI-I-1

Puisque vous parlez de python, l'extrait ci-dessous liste également les écrans connectés:

#!/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())

Ceci vous donnera également les écrans connectés, comme:

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

Remarque

Notez les espaces autour de " connected " dans la chaîne recherchée. Ils sont nécessaires pour éviter les discordances avec disconnected.

6
Jacob Vlijm

Vous pouvez utiliser python et seulement python pour obtenir les noms de moniteur connecté:

$ 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
5
Sylvain Pineau

Vous pouvez utiliser la commande bash avec popen:

import os
    list_display = os.popen("xrandr --listmonitors | grep '*' | awk {'print $4'}").read().splitlines()
4
Antoine Boucher