GNU/Linux >> Belajar Linux >  >> Ubuntu

Bagaimana Cara Membuat Daftar Monitor yang Terhubung Dengan Xrandr?

Saya sedang mengembangkan aplikasi python untuk Ubuntu yang memungkinkan pengguna memiliki resolusi yang diinginkan tanpa memerlukan driver grafis.

Untuk melakukan ini, saya telah menggunakan xrandr , yang sejauh ini cukup berguna

Namun, saya sekarang punya masalah; bagaimana saya bisa mendeteksi nama monitor? Saya bermaksud menggunakan perintah terminal melalui os.system , memodifikasi keluaran terminal untuk mendapatkan keluaran monitor yang diperlukan, dan kemudian menyimpannya di dalam program. Sayangnya, meskipun sudah banyak mencari, saya tidak dapat menemukan bagaimana saya bisa melakukan ini.

Apakah ada cara agar saya bisa melakukan ini?

Singkatnya:Saya mencari perintah terminal yang memberi saya nama monitor, seperti VGA1 atau DVI-0

Jawaban yang Diterima:

Saya tidak yakin bagaimana Anda akan menerapkannya di aplikasi Anda (“mengaktifkan pengguna untuk mendapatkan resolusi yang diinginkan tanpa memerlukan driver grafis” ?), tapi:

Perintah terminal untuk membuat daftar layar yang terhubung

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

Ini akan memberi Anda layar yang terhubung untuk diproses lebih lanjut, seperti:

VGA-0
DVI-I-1

Karena Anda menyebutkan python, cuplikan di bawah ini juga akan mencantumkan layar yang terhubung:

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

Ini juga akan memberi Anda layar yang terhubung, seperti:

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

Catatan

Perhatikan spasi di sekitar " connected " dalam string yang dicari. Mereka diperlukan untuk mencegah ketidakcocokan dengan disconnected .

EDIT 2019

Menggunakan python, tidak perlu menggunakan xrandr atau panggilan sistem lainnya sama sekali. Lebih baik gunakan 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)

Contoh keluaran:

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

Tergantung pada info yang diinginkan, Anda dapat menentukan pilihan dari https://lazka.github.io/pgi-docs/Gdk-3.0/classes/Monitor.html


Ubuntu
  1. Cara Memantau Sistem dengan Sysstat di Centos

  2. Bagaimana Mendapatkan Ls Untuk Mencantumkan Direktori Dengan Trailing Forward-slash?

  3. Cara Memantau Keamanan Server Linux dengan Osquery

  1. Bagaimana Cara Menyimpan Pengaturan Resolusi Baru Dengan Xrandr?

  2. Cara membuat daftar domain dengan DNSSEC

  3. Bagaimana cara mendaftar semua pengguna dengan root?

  1. Cara Memantau Kubernetes Dengan Prometheus

  2. Cara mendaftar pengguna di Ubuntu 20.04

  3. Cara Memantau Sistem Linux dengan Perintah Sekilas