GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak zobrazit seznam připojených monitorů pomocí Xrandr?

Pracuji na vývoji pythonové aplikace pro Ubuntu, která uživateli umožní mít požadované rozlišení bez potřeby grafických ovladačů.

K tomu jsem použil xrandr , který byl zatím docela užitečný

Nyní však mám problém; jak zjistím název monitoru? Měl jsem v úmyslu použít příkaz terminálu prostřednictvím os.system , úpravou výstupu terminálu tak, aby se získal požadovaný výstup monitoru, a jeho uložením do programu. Naneštěstí se mi přes dlouhé hledání nepodařilo zjistit, jak to mohu udělat.

Existuje nějaký způsob, jak to mohu udělat?

Abych to shrnul:Hledám terminálový příkaz, který mi dá název monitoru, například VGA1 nebo DVI-0

Přijatá odpověď:

Nejsem si jistý, jak to ve své aplikaci použijete („umožněte uživateli získat požadované rozlišení bez potřeby grafických ovladačů“ ?), ale:

Příkaz terminálu pro seznam připojených obrazovek

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

Tím získáte připojené obrazovky k dalšímu zpracování, například:

VGA-0
DVI-I-1

Jelikož zmiňujete python, níže uvedený úryvek bude také obsahovat seznam připojených obrazovek:

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

Tím získáte také připojené obrazovky, například:

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

Poznámka

Všimněte si mezer kolem " connected " v hledaném řetězci. Jsou potřeba, aby se zabránilo neshodám s disconnected .

UPRAVIT 2019

Při použití pythonu není nutné používat xrandr nebo jakékoli jiné systémové volání vůbec. Je lepší použít 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)

Příklad výstupu:

[['eDP-1', 0, 0, 3840, 2160], ['DP-2', 3840, 562, 1680, 1050]]

V závislosti na požadovaných informacích si můžete vybrat z https://lazka.github.io/pgi-docs/Gdk-3.0/classes/Monitor.html


Ubuntu
  1. Jak monitorovat systém pomocí Sysstat na Centos

  2. Jak uložit nové nastavení rozlišení pomocí Xrandr?

  3. Jak vytvořit seznam domén s DNSSEC

  1. Jak dostat Ls do seznamu adresářů s koncovým lomítkem?

  2. Jak monitorovat zabezpečení serveru Linux pomocí Osquery

  3. Jak vypíšu všechny uživatele s rootem?

  1. Jak monitorovat Kubernetes pomocí Prometheus

  2. Jak vytvořit seznam uživatelů na Ubuntu 20.04

  3. Jak monitorovat systém Linux pomocí příkazu Glances