web-dev-qa-db-ja.com

ショートカットキーでモニターの向きをすばやく切り替えるにはどうすればよいですか?

以前に誰かがこの質問をしたかどうかを見ながら、私は Windowsの場合 に行きました。

Linux/Ubuntuで同様の操作(ショートカットまたはターミナルエイリアス/コマンド)を実行して、ディスプレイを設定して構成を確認する代わりに、横向きと縦向きモードの間で外部モニターをすばやく切り替えることができるようにします。

Jacob Vlijmは Pythonスクリプト を提供しましたが、これは動作します。別のアイデアがありましたら、私はそれについて知りたいです。

Update:Jacobのスクリプトが機能するように更新しました 接続されている場合は2つの画面用

3
user10853

以下のスクリプトは、画面のいずれかの回転を切り替えるものです。

#!/usr/bin/env python3
import subprocess

# --- set the name of the screen and the rotate direction below
screen = "VGA-1"
rotate = "left"
# ---

matchline = [
    l.split() for l in subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()\
    if l.startswith(screen)
    ][0]
s = matchline[
    matchline.index([s for s in matchline if s.count("+") == 2][0])+1
    ]

rotate = "normal" if s == rotate else rotate
subprocess.call(["xrandr", "--output", screen, "--rotate", rotate])

使い方

  1. スクリプトを空のファイルにコピーし、toggle-rotate.pyとして保存します
  2. スクリプトのヘッドセクションで、以下を設定します。

    • 切り替えたい画面の名前(端末でコマンドxrandrを実行して確認します)
    • 回転方向、leftまたはright(例のように引用符の間)。

      # --- set the name of the screen and the rotate direction below
      screen = "VGA-1"
      rotate = "left"
      # ---
      
  3. コマンドでテスト実行します(ターミナルから2回):

    python3 /path/to/toggle-rotate.py
    
  4. すべてが正常に機能する場合は、ショートカットキーに追加します。システム設定>「キーボード」>「ショートカット」>「カスタムショートカット」を選択します。 「+」をクリックして、コマンドを追加します。

    python3 /path/to/toggle-rotate.py
    

    お好みのショートカットへ...

それでおしまい。

説明

コマンドxrandrの出力では、画面の現在の回転(存在する場合)は、画面の位置の直後に記載されます。次に例を示します。

VGA-1 connected 1024x1280+1680+0 left (normal left inverted right x axis y axis) 376mm x 301mm

この例では、1024x1280+1680+0 leftが表示されます。スクリプトは、スクリプトのヘッドに記載されている画面に対応する行を調べます。 if画面が回転すると、スクリプトは(xrandr)コマンドを実行します。

xrandr --output <screen_name> --rotate normal

notの場合、実行されます(例):

xrandr --output <screen_name> --rotate left

画面を反時計回りに回転するには

4
Jacob Vlijm

私はジェイコブのスクリプトを使用しています。ただし、現在はアダプターを使用しているため、モニターがHDMIに接続されているか、アダプターを介して接続されているかにかかわらず、向きを切り替えることができます。このために、私はJavobのスクリプトを修正し、借りました 彼が書いた別の関数

import subprocess

def screens():
    '''
    get connected 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]

# --- set the name of the screen and the rotate direction below
# screen = "HDMI-1" # run "xrandr" to get the screen
rotate = "left" # the desired orientation

if "HDMI-1" in screens():
    screen = "HDMI-1"
Elif "DP-1" in screens():
    screen = "DP-1"
else:
    pass
# ---

# only run if screen is declared (i.e. either HDMI-1 or DP-1 are connected)
if screen:

    matchline = [
        l.split() for l in subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()\
        if l.startswith(screen)
        ][0]
    s = matchline[
        matchline.index([s for s in matchline if s.count("+") == 2][0])+1
        ]

    rotate = "normal" if s == rotate else rotate
    subprocess.call(["xrandr", "--output", screen, "--rotate", rotate])
0
user10853