Estou executando o i3-wm em uma instalação do Ubuntu. O i3 não detecta nem configura automaticamente o monitor quando eu (des) conecto o cabo miniDP. Eu tentei implementar uma regra do udev que executa um script python que por sua vez executa comandos xrandr. Eu posso executar o script a partir da linha de comando e ele funciona, mas parece não funcionar quando eu desconectar o cabo mDP. Aqui está o conteúdo das minhas regras do udev que estão localizadas em /etc/udev/rules.d/monitor.rules:
KERNEL=="card0", SUBSYSTEM=="drm", ENV{XAUTHORITY}="/var/run/gdm/auth-for-ME-OlbTje/database", RUN+="/path/to/my/script/monitor_toggle.py"
Por sugestões nos comentários, adicionei o registro com código de aqui . O script é executado agora e posso ver minhas informações de registro via / var / log / syslog, mas ..... um milhão de processos começam a ser executados e suspendem o sistema. Eu tenho que hard reset da máquina. Aqui está o roteiro em questão.
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()
saída / 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
Tags udev