모니터가 연결되어 있을 때 X 프로그램 실행

모니터가 연결되어 있을 때 X 프로그램 실행

내 컴퓨터에 이상한 버그가 있습니다. 모니터를 껐다가 다시 켜도 화면이 계속 비어 있습니다. 이는 X로 로그인한 경우에만 발생합니다(Gdm 화면에서는 발생하지 않음). 화면을 밝게 만드는 방법을 찾았습니다.

xset dpms force off
xset dpms force on

모니터가 켜져 있을 때 어떻게 이러한 명령을 자동으로 실행할 수 있습니까?

모니터는 DisplayPort를 통해 연결되고 EDID 정보를 보고합니다. 운영체제는 우분투 18.04 입니다.

폴링 기반 솔루션은 허용되지 않습니다. 모니터를 열면 기다리지 않고 반응해야 하므로 폴링에는 매우 짧은 간격이 필요하지만 이는 자주 발생하지 않는 작업이므로 CPU가 1초 미만 간격으로 작업을 실행할 만큼 뜨거운 상태를 유지할 것이라는 보장이 없습니다. 나는 ~을 찾고 있다방아쇠모니터가 연결되면 X 세션에서 실행됩니다.

답변1

udev를 사용하는 솔루션이 있습니다. 강력하지는 않지만 나에게는 충분합니다.

파일을 만듭니다 (문자, 숫자 및 확장자 /etc/udev/rules.d/99-monitor.rules만 포함하는 한 정확한 파일 이름은 중요하지 않습니다 )._-.rules

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/sbin/monitor-change.udev.sh"

파일을 생성 /usr/local/sbin/monitor-change.udev.sh하고 실행 가능하게 만듭니다.

#!/bin/bash
set -e

start_logging () {
  exec >/var/log/monitor-change.log 2>&1
  echo
  set -x
  date
}

awaken_monitor () {
  # Hack: the monitor stays blank, but forcing it off then on in software
  # somehow turns it on.
  xset dpms force off
  xset dpms force on
}

detect_xorg () {
  tty=/dev/tty$(fgconsole)
  # Find Xorg running on the foreground console
  pids=$(fuser "$tty" 2>/dev/null)
  auth_regexp=' -auth ([^ ]*)'
  for pid in $pids; do
    args=$(ps -o args= -p $pid)
    if [[ "$args" = /usr/lib/xorg/Xorg* ]] &&
       [[ "$args" =~ $auth_regexp ]]
    then 
      # Hard-code DISPLAY=:0 because it's hard to detect
      export DISPLAY=":0" XAUTHORITY="${BASH_REMATCH[1]}"
      return 0
    fi
  done
  return 1
}

#start_logging
detect_xorg
awaken_monitor

그것은 행동한다모니터 변경. 여기에는 모니터를 끄고 켜는 작업이 포함되며 여러 대의 모니터를 구분하지 않습니다. 하지만 이 특정 컴퓨터에는 모니터가 하나만 있으므로 저에게는 충분합니다.

udev 스크립트X 세션 감지(일반적으로 이 Ubuntu 18.04 기본 설정에서는 tty2에서 실행됩니다.) 이 컴퓨터에는 사용자가 한 명뿐이므로 작업을 단순하게 유지했습니다. X 호출 라인은 Gdm을 사용하여 X 서버를 호출한다고 가정합니다. Gdm을 사용하지 않는 경우 이 섹션을 변경해야 할 수도 있습니다.

나는 dbus 기반 솔루션을 선호하지만 어떤 이벤트에 반응해야 할지 모르겠습니다.

관련 정보