Shell-Script

插入或拔出 HDMI 時如何編寫 bash 腳本來配置我的顯示器

  • November 25, 2013

我有一個執行 Kubuntu Precise (12.04) 的筆記本,我偶爾會用它來觀看影片。當我這樣做時,我插入一條連接到 A/V 接收器的 HDMI 電纜,並連接了一個 HDMI 監視器。

當我以這種方式觀看影片時,我在與系統互動控製播放等時仍然需要使用筆記本顯示器。HDMI顯示器上的文字從我坐的地方很難閱讀。

當我插入 HDMI 電纜時,Kubuntu 會檢測到它,但我必須通過一個奇怪的舞蹈序列(有效,但很複雜)才能每次都正確設置影片和音頻。為了解決這個問題,我正在嘗試編寫一個 bash 腳本,xrandr以便第一次正確地完成它。

我從 Peoro 對這個 U&L Q&A 的回答中得到了基本的想法,標題為:插入外部顯示器時自動應用 RandR 配置的工具

關於我的劇本

我的腳本(包括在下面)有效,但需要改進。

它為 HDMI 顯示器正確設置了影片模式,但 LVDS1 顯示器(在筆記型電腦上)變為僅顯示桌面的左上部分 - 這是一個問題,因為它切斷了右側的視窗捲動條和打開的工作列底端。

我嘗試使用 修復此問題--scale,但我的第一次嘗試將事情搞砸了,以至於我不得不重新啟動才能恢復正常工作的顯示。

有沒有辦法讓兩個顯示器顯示相同的內容,但每個顯示器都使用自己單獨的首選解析度?

或者,至少,一種設置筆記本顯示器的方法,以便在使用 HDMI 顯示器時仍然可以訪問整個桌面?

由於我正在調試腳本,因此尚未清理它。我可能想讓它以後做更多。

我的劇本

#!/bin/bash
## hdmi_set
## Copyleft 11/13/2013 JPmicrosystems
## Adapted from
## https://unix.stackexchange.com/questions/4489/a-tool-for-automatically-applying-randr-configuration-when-external-display-is-p
## Answer by peoro

# 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

##source $HOME/bin/bash_trace
# default monitor is LVDS1
MONITOR=LVDS1

# functions to switch from LVDS1 to HDMI and vice versa
function ActivateHDMI {
   echo "Switching to HDMI"
   ##xrandr --output HDMI1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
   ##xrandr --output HDMI1 --same-as LVDS1
   xrandr --output HDMI1 --mode 1920x1080
   xrandr --output LVDS1 --mode 1366x768
   MONITOR=HDMI1
}
function DeactivateHDMI {
   echo "Switching to LVDS1"
   xrandr --output HDMI1 --off --output LVDS1 --auto
   MONITOR=LVDS1
}

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

## MONITOR doesn't do anything because it's not preserved between script executions
# actual script
##while true
##do
   if HDMIConnected
   then
       ActivateHDMI
   fi

   if ! HDMIConnected
   then
       DeactivateHDMI
   fi

   ##sleep 1s
##done

xrandr 的輸出

這是 xrandr 看到的:

bigbird@ramdass:~$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
  1366x768       60.0*+
  1360x768       59.8     60.0  
  1024x768       60.0  
  800x600        60.3     56.2  
  640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected (normal left inverted right x axis y axis)
  1920x1080      60.0 +
  1680x1050      60.0  
  1280x1024      60.0  
  1440x900       59.9  
  1280x720       60.0  
  1024x768       60.0  
  800x600        60.3  
  720x480        59.9  
  640x480        60.0  
  720x400        70.1  
DP1 disconnected (normal left inverted right x axis y axis)

您可能應該簡單地使用kscreen代替,這應該可以解決您的所有問題。它將記住先前連接的螢幕的設置,並在您再次連接後恢復它們。

如果您在使用 kscreen 時仍然遇到此類問題,則值得報告錯誤

由於 Kubuntu 12.04 已經很老了,你可能應該看看這個.

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