コンソール tty 経由でディスプレイをアクティブ化しますか?

コンソール tty 経由でディスプレイをアクティブ化しますか?

外部モニターを有効にし、ラップトップのモニターを無効にするカスタム xrandr スクリプトがあります。外部モニターを切断すると、画面が空白になるため、モニターを有効にできません。

コンソール tty (ctrl-alt-f1) にアクセスして、xrandr を起動できるようにしたいです (つまり xrandr --output eDP1 --auto)。tty でそれを実行すると、「ディスプレイを開けません」というメッセージが表示されます。これを行うためのヒントはありますか?

答え1

コンソールに移動する必要はありません。カスタム キーボード ショートカットを追加して内部画面を再度有効にすることで、同じことを実現できます。

システム設定 > キーボード > ショートカット > カスタムショートカットを選択し、+ をクリックして、選択したショートカットにコマンドを追加します。

xrandr --output <screenname> --auto

私のシステム (ラップトップ、15.10) でテストしたところ、画面をオフにして、キーボード ショートカットでコマンドを実行して、正常に再度有効にできました :)

あるいは

編集版を使うこともできますこのスクリプト以下のバージョン(小さなバックグラウンドスクリプト、外部スクリーンが接続されているかどうかを4秒ごとにチェックする)は、内部スクリーンがオンになっていることを確認します。

#!/usr/bin/env python3
import subprocess
import time
# --- set your internal screen below (the example is my primary screen)
internal = "DVI-I-1"
#---

# don't change anything below
scr_info1 = 0

while True:
    time.sleep(4)
    # read the current screen setup from xrandr
    get_screens = subprocess.check_output("xrandr").decode("utf-8").splitlines()
    scr_data = [l for l in get_screens if " connected " in l]
    # count the number of connected screens
    scr_info2  = len(scr_data)
    # if the number of connected screens changes, 
    # switch off the internal one if there are two screens
    if scr_info2 != scr_info1:
        if scr_info2 == 2:
            ext = [s.split()[0] for s in scr_data if not internal in s][0]
            subprocess.Popen(["xrandr", "--output", internal, "--off", "--output", ext, "--auto"])
        else:
            subprocess.Popen(["xrandr", "--output", internal, "--auto"])

    scr_info1 = scr_info2

セットアップ方法

  1. 上記のスクリプトを空のファイルにコピーし、switch_screens.py
  2. スクリプトの先頭セクションで、内部画面。確認するには、ターミナル ウィンドウを開いてコマンドを実行しますxrandr(外部画面は接続されていません)。「connected」を含む行の最初の文字列には、画面の名前が表示されます。VGA-1次のように表示されます。
  3. テスト - ターミナル ウィンドウを開いて次のコマンドを入力して実行します。

    python3 /path/to/switch_screens.py
    

    スクリプトの実行中に、外部画面を接続し、内部画面がオフになるまで待ってから再度切断します。

  4. すべて正常に動作する場合は、以下のコマンドをスタートアップ アプリケーションに追加します。Dash > スタートアップ アプリケーション > 追加を開きます。次のコマンドを追加します。

    /bin/bash -c "sleep 15 && python3 /path/to/switch_screens.py"
    

ログアウトして再度ログインします。これで、外部画面が接続されている場合、内部画面は自動的にオフになり、切断すると再び有効になります。

このスクリプトはシステムに目立った負担をまったく加えません。

関連情報