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