다음을 수행 할 수있는 도구가 있습니까?
구성은 사용자별로, 디스플레이별로 적용되어야합니다.
야생에 그러한 도구가 없다면 직접 도구를 던지고 싶지만 볼 수있는 한 모니터가 연결되었다는 것을 알 수있는 방법이 없습니다. 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
.sh 파일을 실행하십시오.
./homemadeMonitor.sh
질문의 "모니터가 연결되어 있는지 확인하는 방법"에 응답 :
지원은 여전히 상당히 다양하지만 최근 커널에서는 디스플레이 핫 플러그가 발생할 때 udev 이벤트를 생성 할 수 있습니다. 커널 2.6.38 및 ATI X1400 하드웨어를 사용하면 VGA 디스플레이를 처음 연결할 때 이벤트가 발생하지만 디스플레이의 연결을 끊거나 다시 연결하면 이벤트가 발생하지 않습니다. Intel 하드웨어는 더 나은 지원을 제공 할 수 있습니다. NVIDIA 독점 드라이버는 현재 KMS를 지원하지 않습니다. NVIDIA 하드웨어에서 핫 플러그 이벤트를 찾지 않았지만 제대로 작동하는지는 의문입니다.
Udev로 실험하고 싶다면 다음 단계를 시도하십시오.
[drm] radeon kernel modesetting enabled
및 [drm] initializing kernel modesetting
udevadm monitor --property
연결을 끊을 때 이벤트가보고되는지 확인디스플레이 핫 플러그에서 udev 이벤트를받는 경우 다음과 같은 udev 규칙을 사용하여 스크립트를 트리거 할 수 있습니다.
ACTION=="change", SUBSYSTEM=="drm", HOTPLUG=="1", RUN+="/path/to/hotplug.sh"
참고 : 이것은 독점 바이너리 드라이버와 함께 nVIDIA GPU를 사용하지 않으면 작동합니다 not KMS. not udev 이벤트를받습니다.
사용자 별 및 디스플레이별로 모니터 구성 프로파일을 저장할 수있는 도구와 관련하여 autorandr 는 정확히 그렇게합니다.
내 노트북에는 NVIDIA 카드가 있으므로 xrandr 대신 disper backend 를 사용합니다. Autorandr는 모니터를 autodisper
라고 부르면 모니터를 관리하기 위해 백엔드로 disper를 사용합니다. 이 게시물의 나머지 부분에서는 일관성을 위해 autorandr
라고합니다.
autorandr --save profile_name
로 프로필을 저장할 수 있습니다. autorandr
을 단독으로 실행하면 프로파일 목록이 제공되고 현재 구성으로 감지 된 프로파일이 식별됩니다.
예를 들어 :
$ autorandr
laptop
syncmaster19 (detected)
autorandr --change
를 사용하여 현재 구성에 적합한 프로파일을 자동으로로드하도록 지시 할 수 있습니다. 이 명령은 핫 플러그시 udev 규칙과 쌍을 이루어 실행되어 요청한 작업을 수행합니다.
추가 예방 조치로 --default laptop
를 해당 명령에 추가했습니다. 현재 구성과 일치하는 저장된 프로파일이없는 경우 랩톱의 디스플레이가 기본값이됩니다. 따라서 디스플레이를 전환하는 데 사용하는 전체 명령은 다음과 같습니다.
autorandr --change --default laptop
불행히도 내 컴퓨터는 모니터를 핫 플러그 할 때 udev 출력을 제공하지 않습니다. NVIDIA 독점 드라이버를 사용하고 있으므로 놀랍지 않습니다. 그래서 지금은 XF68Display 키 (Fn-F8)에 바인딩했습니다.
위에서 제안한 udev 규칙을 셸 스크립트와 함께 사용했습니다.
#!/bin/sh
dmode="$(cat /sys/class/drm/card0-VGA-1/status)"
export DISPLAY=:0
export XAUTHORITY=/home/yourusername/.Xauthority
if [ "${dmode}" = disconnected ]; then
/usr/bin/xrandr --auto
Elif [ "${dmode}" = connected ];then
/usr/bin/xrandr --output VGA1 --auto --right-of LVDS1
else /usr/bin/xrandr --auto
fi
내보내기 DISPLAY
뿐만 아니라 Xauthority 부분은 필수입니다. echo $DISPLAY
같은 숫자를 확인하십시오. 사용하다 xrandr -q
가지고있는 외부 모니터를 봅니다. 마지막 else 문은 디스플레이 없이는 절대 멈추지 않도록하는 것입니다.
X 서버가 변경된 모니터 구성에 대해 알릴 때까지 기다렸다가 주어진 명령 (예 : 다른 답변에서 언급 된 autorandr
)을 실행하는 작은 프로그램은 다음 위치에서 사용할 수 있습니다. https : // bitbucket .org/portix/srandrd/overview
이것은 udev
(올바른 X 서버 등을 찾는 것에 대해 걱정 해야하는 곳)를 사용하는보다 깨끗한 솔루션 인 것 같습니다.
플러그를 꽂을 때 디스플레이를 자동으로 감지해야하는 경우 가장 깨끗한 해결책은 xrandr 명령이 포함 된 스크립트를 실행하기 위해 UDEV 규칙을 추가하는 것 같습니다. 다음은 한 사용자 솔루션의 예입니다 .- 1 :
udevadm
을 사용하여 UDEV 이벤트 모니터링 (출력)
이 단계는 각 사용자에게 가장 중요합니다. 운영 udevadm monitor --environment --udev
. 그런 다음 HDMI 케이블을 연결하십시오.
DEV 규칙
위 명령의 출력을 기반으로 사용자는 /etc/udev/rules.d/95-monitor-hotplug.rules
.
KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/dan/.Xauthority", RUN+="/usr/local/bin/hotplug_monitor.sh"
Xrandr이 사용자 프로파일 하에서 실행되도록 사용 된 환경 변수에 유의하십시오.
xrandr 스크립트 hotplug_monitor.sh
필요에 따라 xrandr 옵션을 조정할 수 있습니다.
#! /usr/bin/bash
export DISPLAY=:0
export XAUTHORITY=/home/dan/.Xauthority
function connect(){
xrandr --output HDMI1 --right-of LVDS1 --preferred --primary --output LVDS1 --preferred
}
function disconnect(){
xrandr --output HDMI1 --off
}
xrandr | grep "HDMI1 connected" &> /dev/null && connect || disconnect
어떤 이유로 든 핫 플러그 경로를 사용하지 않으려는 경우 inotifywait를 사용하여 스크립트 내에서 폴링하지 않을 수 있습니다.
#!/bin/bash SCREEN_LEFT = DP2 SCREEN_RIGHT = eDP1 START_DELAY = 5 renice +19 $$>/dev/null sleep $ START_DELAY OLD_DUAL = "dummy" 동안 [ 1 ]; do DUAL = $ (cat /sys/class/drm/card0-DP-2/status) if [ "$$ _ DUAL"! = "$ DUAL"]; 그런 다음 if [ "$ DUAL"== "connected"]; 그런 다음 echo '듀얼 모니터 설정' xrandr --output $ SCREEN_LEFT --auto-정상 회전 --pos 0x0 --output $ SCREEN_RIGHT --auto-정상 회전-아래 $ SCREEN_LEFT else echo '단일 모니터 설정' xrandr --auto fi OLD_DUAL = "$ DUAL" fi inotifywait -q -e 닫기/sys/class/drm/card0-DP-2/status>/dev/null 완료
Xrandr와의 폴링은 내 새로운 랩톱에서 심각한 사용성 문제를 일으켰습니다 (마우스가 주기적으로 정지합니다).
예를 들어 Xfce를 단순화하려면 배포판에서 사용할 수있는 "arandr"을 설치하십시오. 예를 들어 "arandr"을 사용하여 디스플레이를 구성한 다음 "displayLayout"으로 저장하십시오. Arandr는 ".sh"확장자를 추가하여 위의 iyrin이 언급 한 "hotplug_monitor.sh"스크립트에 작성된대로 "function connect ()"에서 직접 사용할 수 있도록합니다. 예를 들면 다음과 같습니다.
function connect(){
/path/to/displayLayout.sh
}
연결 해제 메커니즘을 사용하려면 다음과 같이 "#!/bin/bash"바로 아래에 스크립트 맨 위에 추가하십시오.
#!/bin/bash
#
PLUGGED_EXTERNAL=`xrandr | awk /"connected [0-9]"/'{print $1}'`
xrandr은 디스플레이를 감지하고 출력을 awk로 전달하여 정규식 "connected"와 그 뒤에 본질적으로 원하는 숫자를 기준으로 필터링합니다. 제 생각에는 기본 디스플레이가 "연결된 기본"과 숫자, 즉 해상도와 같이보고되기 때문에 정규 표현식에서 정확한 해상도와 일치시킬 필요는 없습니다. 그런 다음 awk "print $ 1"은이 경우 외부 모니터의 이름 인 첫 번째 열만 인쇄하며 PLUGGED_EXTERNAL 변수에 저장됩니다. 다음 스크립트 $ PLUGGED_EXTERNAL에서 고정 표시 이름 "HDMI1"대신 다음과 같이 사용할 수 있습니다.
function disconnect(){
xrandr --output $PLUGGED_EXTERNAL --off
}
xrandr | grep "$PLUGGED_EXTERNAL connected" &> /dev/null && connect || disconnect
이 질문을 보는 사람들은 그놈을 사용하려는 사람들이 아니고 그놈을 사용하는 사람들은이 질문을 볼 필요는 없지만 완전성을 위해 관심을 가질 것입니다.
그놈에는이 기능이 내장되어 있습니다. gnome-control-center를 통해 설정을 변경하면 gnome-settings-daemon이이를 기억합니다 (.config/monitors.xml
) 모니터를 꽂거나 뺄 때 자동으로 적용됩니다.
안타깝게도 monitors.xml 파일의 구성은 잘 문서화되어 있지 않습니다. 질문 여기 를 참조하십시오. 그놈 디스플레이 툴링은 또한 패닝, 모니터 당 스케일링을 설정하는 수단이 없으며 축소하지 않습니다. 많은 사람들이 일반 DPI 화면과 함께 HiDPI 랩톱 화면을 사용함에 따라 도구로는 실행 가능한 솔루션을 얻는 데 충분하지 않습니다.
나는 이것을 Wayland에 대한 로드맵 항목으로 언급 을 보았지만 마침내 올 때 언급 한 문제에 대한 수정 사항을 볼 수 있습니다. 그때까지 Gnome에서 xrandr를 수동으로 설정하기 위해 지연된 후 시작 스크립트를 실행했습니다.
Peoro의 솔루션을 사용할 때 xrandr에서 추가 출력을 얻었으므로 grep에 -c 옵션을 사용하여 일치 횟수를 계산했습니다. HDMI에 맞게 조정하고 오디오 스위치도 추가했습니다.
#!/bin/bash
# adapted from http://unix.stackexchange.com/questions/4489/
# default monitor is LVDS1
MONITOR=LVDS1
# functions to switch from LVDS1 to HDMI1
function ActivateHDMI {
xrandr --output HDMI1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
pactl set-card-profile 0 output:hdmi-stereo-extra1
MONITOR=HDMI1
}
function DeactivateHDMI {
xrandr --output HDMI1 --off --output LVDS1 --auto
pactl set-card-profile 0 output:analog-stereo
MONITOR=LVDS1
}
# functions to check if HDMI is connected and in use
function HDMIActive {
[ $MONITOR = "HDMI1" ]
}
function HDMIConnected {
[[ `xrandr | grep "^HDMI1" | grep -c disconnected` -eq 0 ]]
}
# actual script
while true
do
if ! HDMIActive && HDMIConnected
then
ActivateHDMI
fi
if HDMIActive && ! HDMIConnected
then
DeactivateHDMI
fi
sleep 1s
done
설정을보다 간단하게하기 위해 내 답변을 편집합니다.
Xrandr에서 화면 레이아웃을 자동화하기 위해 autorandr를 설치하고 https://github.com/nalipaz/autorandr/releases 에서 최신 .deb를 가져 와서 다음을 실행하십시오.
dpkg -i [file]
저장된 화면 레이아웃으로 자동 랜 설정
autorandr --save [docked|mobile|home|etc]
예를 들어, 모니터가 연결되지 않은 랩톱에서 원하는 방식으로 설정하고 실행했습니다.
autorandr --save mobile
그런 다음 hdmi를 연결하고 arandr를 재구성 한 후 다음을 실행했습니다.
autorandr --save docked
각 레이아웃을 설정 한 후 실행할 수 있습니다 ( 'mobile'을 이전에 선호하는 이름으로 바꾸고 mobile을 사용했습니다).
autorandr --default mobile
이제 autorandr가 모두 설정되었으므로 연결된 디스플레이를 폴링하고 감지시 autorandr --change
를 실행하는 패키지를 설치하여 프로세스를 자동화 할 수 있습니다. 그렇습니다, 나는 udev에 대해 알고 있으며 그것이 당신에게 효과가 있다면 그것을 설정할 수 있지만, 내 테스트에서 udev는 hdmi에서 일관되게 작동하지 않았습니다. 그것은 20 개의 플러그/언 플러그마다 1 개만 작동했고 때로는 중단되었습니다.
여기에서 최신 .deb를 다운로드하십시오 : https://github.com/nalipaz/poll-xrandr/releases/
dpkg -i [file]
autorandr --change
완료시 더 많은 작업을 실행해야 할 가능성이 가장 높습니다. autorandr를 사용하면 이러한 명령을 ~/.autorandr/postswitch라는 파일에 삽입 할 수 있습니다. 다음과 같이하십시오 :
cd ~/.autorandr/ && touch postswitch && chmod +x postswitch
이제 postswitch 파일을 편집하여 다음과 비슷한 내용을 갖습니다.
#!/bin/bash
if pidof conky > /dev/null 2>&1; then
killall conky
fi
(sleep 2s && xrandr-adjust-brightness restore -q) &
(sleep 2s && nitrogen --restore) &
(sleep 3s && conky -q) &
또한 autorandr 및 poll-xrandr를 다음 두 명령과 같은 스타트 업에 추가 할 수 있습니다.
autorandr --change &
poll-xrandr &
모니터의 플러그를 뽑거나 꽂고 마술을보십시오!