it-swarm.com.de

Wie kann ich mit xrandr verbundene Monitore auflisten?

Ich arbeite an der Entwicklung einer python -Anwendung für Ubuntu, mit der ein Benutzer die gewünschte Auflösung erzielen kann, ohne Grafiktreiber zu benötigen.
Zu diesem Zweck habe ich xrandr verwendet, was bisher ziemlich nützlich war

Allerdings habe ich jetzt ein Problem; Wie kann ich den Monitornamen erkennen? Ich wollte einen Terminalbefehl über os.system verwenden, die Terminalausgabe ändern, um die erforderliche Monitorausgabe zu erhalten, und sie dann im Programm speichern. Leider konnte ich trotz intensiver Suche nicht herausfinden, wie ich das tun kann.

Kann ich das auf irgendeine Weise tun?

Um es zusammenzufassen: Ich suche nach einem Terminal-Befehl, der mir den Monitornamen gibt, wie VGA1 oder DVI-0

6
TellMeWhy

Ich bin nicht sicher, wie Sie es in Ihrer Anwendung anwenden werden ("einem Benutzer die gewünschte Auflösung ermöglichen, ohne Grafiktreiber zu benötigen"?), Aber:

Ein Terminalbefehl zum Auflisten verbundener Bildschirme

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

Auf diese Weise erhalten Sie die verbundenen Bildschirme zur weiteren Verarbeitung, z.

VGA-0
DVI-I-1

Da Sie Python erwähnen, listet das folgende Snippet auch verbundene Bildschirme auf:

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

Dadurch erhalten Sie auch die verbundenen Bildschirme wie:

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

Hinweis

Beachten Sie die Leerzeichen um " connected " in der gesuchten Zeichenfolge. Sie werden benötigt, um Fehlpaarungen mit disconnected zu vermeiden.

6
Jacob Vlijm

Sie können python und nur python verwenden, um die Namen der angeschlossenen Monitore abzurufen:

$ 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

Sie können den Befehl bash mit popen verwenden:

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