插入外部顯示器時自動應用 RandR 配置的工具
有沒有一種工具可以讓你:
- 在每個顯示器的基礎上記住目前的 RandR 配置(位置、方向、解析度等),
- 插入顯示器後自動應用上次已知的良好配置,無需使用小程序或 xrandr(1)?
必須在每個使用者、每個顯示器的基礎上應用這些配置。
如果野外沒有這樣的工具,我想自己組裝一個,但據我所知,無法判斷是否已插入監視器。我是否必須使用 xrandr -q 進行輪詢偶爾找出輸出已連接或斷開,或者有更有效的方法嗎?udev 可以調整為做到這一點嗎?
我正在使用這個簡單的(自製)腳本,當 VGA 連接/斷開連接時,它會不斷輪詢 RandR 並在 LVDS1 和 VGA1 之間切換。(對於HDMI輸出,在以下腳本文件中,將所有更改
VGA1
為HDMI1
)這是一個骯髒的解決方案,但它工作得很好。
它是為我的設置定制的:您很可能需要更改 RandR 輸出名稱(
LVDS1
和VGA1
),與我不同的是,您可能對 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
完整步驟:
- 將上述腳本 (
homemadeMonitor.sh
) 放入您的首選目錄- 通過在終端中鍵入以下命令使 .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),這幾乎一樣好。