Je travaille sur le développement d'une application python pour Ubuntu qui permet à un utilisateur d'avoir la résolution souhaitée sans nécessiter de pilotes graphiques.
Pour ce faire, j'ai utilisé 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
, en modifiant la sortie du terminal pour obtenir la sortie moniteur requise, puis en la stockant dans le programme. Malheureusement, malgré de nombreuses recherches, je n'ai pas trouvé comment je peux faire cela.
Existe-t-il un moyen de faire cela ?
Pour résumer :Je recherche une commande de terminal qui me donne le nom du moniteur, comme VGA1
ou DVI-0
Réponse acceptée :
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 pilotes graphiques" ?), mais :
Une commande de terminal pour lister les écrans connectés
xrandr | grep " connected " | awk '{ print$1 }'
Cela vous donnera les écrans connectés pour un traitement ultérieur, comme :
VGA-0
DVI-I-1
Puisque vous mentionnez python, l'extrait ci-dessous répertorie é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())
Cela 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 incompatibilités avec disconnected
.
ÉDITER 2019
En utilisant python, pas nécessaire d'utiliser xrandr
ou tout autre appel système. Mieux vaut utiliser 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)
Exemple de sortie :
[['eDP-1', 0, 0, 3840, 2160], ['DP-2', 3840, 562, 1680, 1050]]
En fonction des informations souhaitées, vous pouvez faire votre choix depuis https://lazka.github.io/pgi-docs/Gdk-3.0/classes/Monitor.html