핫플러깅 디스플레이 포트 모니터를 위한 udev 규칙을 통한 Python 스크립트

핫플러깅 디스플레이 포트 모니터를 위한 udev 규칙을 통한 Python 스크립트

우분투 설치에서 i3-wm을 실행하고 있습니다. miniDP 케이블을 (분리) 연결하면 i3가 모니터 설정을 자동으로 감지하고 구성하지 않습니다. 저는 xrandr 명령을 실행하는 Python 스크립트를 실행하는 udev 규칙을 구현하려고 합니다. 명령줄에서 스크립트를 실행할 수 있고 작동하지만 mDP 케이블을 뽑으면 실행되지 않는 것 같습니다. /etc/udev/rules.d/monitor.rules에 있는 udev 규칙의 내용은 다음과 같습니다.

KERNEL=="card0", SUBSYSTEM=="drm", ENV{XAUTHORITY}="/var/run/gdm/auth-for-ME-OlbTje/database", RUN+="/path/to/my/script/monitor_toggle.py"

의견에서 제안한 대로 다음 코드에서 로깅을 추가했습니다.여기. 이제 스크립트가 실행되고 /var/log/syslog를 통해 내 로그 메시지를 볼 수 있지만...백만 개의 프로세스가 실행되기 시작하고 시스템이 정지됩니다. 기계를 강제로 재설정해야 했습니다. 문제의 스크립트입니다.

import subprocess
import logging
from logging.handlers import SysLogHandler
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
syslog = SysLogHandler(address = '/dev/log')
logger.addHandler(syslog)

home_dual       = "/home/vazquez/.screenlayout/i3_home_dual.sh"
home_single     = "/home/vazquez/.screenlayout/i3_home_single.sh"
monitor_toggle  = "/home/vazquez/bin/monitor_toggle.py"


def main():
    logger.debug("In Main")
    card = "/sys/class/drm/card0-DP-1"
    logger.debug("Checking status of mDP")
    status = subprocess.check_output(["cat","/sys/class/drm/card0-DP-1/status"] )
    status = status.decode( 'ascii' )
    logger.debug("status: {0}".format(status))

    # If the mDP is disconnected run home_single
    if 'disconnected' in status:
        # ret = subprocess.check_output(monitor_toggle)
        logger.debug("montor")
        try:
            dead = subprocess.check_output(["sh", home_single])
        except:
            logger.debug( "ret1 = {0}".format(dead) )
    # else the mDP is connect, run home_dual    
    else:
        logger.debug("In else")
        logger.debug("connecting external monitor")
        # ret = subprocess.check_output(monitor_toggle)
        try:
            beef = subprocess.check_output(["sh", home_dual])
        except:
            logger.debug(" ret 2: {0}".format(beef) )


if __name__=="__main__":
    main()

/var/log/syslog 출력

tail  /var/log/syslog
Apr 26 21:35:01 vazquez-dev CRON[3243]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Apr 26 21:36:11 vazquez-dev In Main
Apr 26 21:36:11 vazquez-dev Checking status of mDP
Apr 26 21:36:11 vazquez-dev status: disconnected
Apr 26 21:36:11 vazquez-dev montor 
Apr 26 21:39:34 vazquez-dev In Main
Apr 26 21:39:34 vazquez-dev Checking status of mDP
Apr 26 21:39:34 vazquez-dev status: connected
Apr 26 21:39:34 vazquez-dev In else
Apr 26 21:39:34 vazquez-dev connecting external monitor

관련 정보