私はUbuntu用のPythonアプリケーションの開発に取り組んでいます。これにより、ユーザーはグラフィックスドライバーを必要とせずに希望の解像度を得ることができます。
これを行うために、私はxrandr
を使用しています 、これまでのところ、かなり役に立ちました
しかし、今は問題があります。モニター名を検出するにはどうすればよいですか? os.system
を介してターミナルコマンドを使用するつもりでした 、端末出力を変更して必要なモニター出力を取得し、それをプログラム内に保存します。残念ながら、多くの検索を行ったにもかかわらず、これを行う方法を見つけることができませんでした。
これを行う方法はありますか?
要約すると、 VGA1
などのモニター名を表示するターミナルコマンドを探しています。 またはDVI-0
承認された回答:
アプリケーションでどのように適用するのかわかりません(「ユーザーがグラフィックドライバを必要とせずに希望の解像度を使用できるようにする」 ?)、しかし:
接続されている画面を一覧表示する端末コマンド
xrandr | grep " connected " | awk '{ print$1 }'
これにより、次のように、さらに処理するための接続された画面が表示されます。
VGA-0
DVI-I-1
Pythonについて言及しているので、以下のスニペットには接続されている画面も一覧表示されます:
#!/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())
これにより、次のような接続された画面も表示されます。
['VGA-0', 'DVI-I-1']
注
" connected "
の周りのスペースに注意してください 検索された文字列内。 disconnected
との不一致を防ぐために必要です 。
2019年編集
Pythonを使用し、xrandr
を使用する必要はありません または他のシステムコール。 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)
出力例:
[['eDP-1', 0, 0, 3840, 2160], ['DP-2', 3840, 562, 1680, 1050]]
必要な情報に応じて、https://lazka.github.io/pgi-docs/Gdk-3.0/classes/Monitor.html
から選択できます。