Linux

插入外部顯示器時自動應用 RandR 配置的工具

  • April 10, 2020

有沒有一種工具可以讓你:

  • 在每個顯示器的基礎上記住目前的 RandR 配置(位置、方向、解析度等),
  • 插入顯示器後自動應用上次已知的良好配置,無需使用小程序或 xrandr(1)?

必須在每個使用者、每個顯示器的基礎上應用這些配置。

如果野外沒有這樣的工具,我想自己組裝一個,但據我所知,無法判斷是否已插入監視器。我是否必須使用 xrandr -q 進行輪詢偶爾找出輸出已連接或斷開,或者有更有效的方法嗎?udev 可以調整為做到這一點嗎?

我正在使用這個簡單的(自製)腳本,當 VGA 連接/斷開連接時,它會不斷輪詢 RandR 並在 LVDS1 和 VGA1 之間切換。(對於HDMI輸出,在以下腳本文件中,將所有更改VGA1HDMI1

這是一個骯髒的解決方案,但它工作得很好。

它是為我的設置定制的:您很可能需要更改 RandR 輸出名稱(LVDS1VGA1),與我不同的是,您可能對 VGA 的 RandR 預設模式沒問題。

#!/bin/bash

# setting up new mode for my VGA
xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 1095 1125 +hsync +vsync
xrandr --addmode VGA1 1920x1080

# default monitor is LVDS1
MONITOR=LVDS1

# functions to switch from LVDS1 to VGA and vice versa
function ActivateVGA {
   echo "Switching to VGA1"
   xrandr --output VGA1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
   MONITOR=VGA1
}
function DeactivateVGA {
   echo "Switching to LVDS1"
   xrandr --output VGA1 --off --output LVDS1 --auto
   MONITOR=LVDS1
}

# functions to check if VGA is connected and in use
function VGAActive {
   [ $MONITOR = "VGA1" ]
}
function VGAConnected {
   ! xrandr | grep "^VGA1" | grep disconnected
}

# actual script
while true
do
   if ! VGAActive && VGAConnected
   then
       ActivateVGA
   fi

   if VGAActive && ! VGAConnected
   then
       DeactivateVGA
   fi

   sleep 1s
done

完整步驟:

  1. 將上述腳本 ( homemadeMonitor.sh) 放入您的首選目錄
  2. 通過在終端中鍵入以下命令使 .sh 文件可執行

chmod +x homemadeMonitor.sh 3. 執行 .sh 文件

./homemadeMonitor.sh

關於可以在每個使用者和每個顯示器的基礎上儲存監視器配置文件的工具,autorandr將完全做到這一點。

我的筆記型電腦有一個 NVIDIA 卡,所以我使用disper 後端而不是 xrandr。如果您將 Autorandr 稱為autodisper. 不過,對於這篇文章的其餘部分,我將把它稱為autorandr一致性。

您可以使用 保存配置文件autorandr --save profile_name。單獨執行autorandr會為您提供一個配置文件列表,並確定哪個配置文件被檢測為目前配置。

例如:

$ autorandr
laptop
syncmaster19 (detected)

您可以告訴它為目前配置自動載入適當的配置文件autorandr --change。此命令與 udev 規則配對以在熱插拔時執行它,將執行您的請求。

作為一項額外的預防措施,我已附加--default laptop到該命令,如果沒有與目前配置匹配的已保存配置文件,它將使其預設為筆記型電腦的顯示。所以我用來切換顯示的完整命令是:

autorandr --change --default laptop

不幸的是,當我熱插拔顯示器時,我的機器沒有提供任何 udev 輸出。我使用的是 NVIDIA 專有驅動程序,所以這並不奇怪。所以我現在已經將它綁定到 XF68Display 鍵(Fn-F8),這幾乎一樣好。

引用自:https://unix.stackexchange.com/questions/4489