В ссылке что я вам кинул вызов выглядит не так:
KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/usr/bin/arandr"
И я подозреваю, что отсутствие у вас в конфиге удава
ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority"
- это ключевая проблема. Когда вы дергаете удава из консоли - это все равно происходит из вашей сессии иксов, там переменные наследуются. А вот когда удав сам возбуждается - у ему этих данных не хватает. Да, вы пытаетесь это задать в самом скрипте, но там уже поздно. Они нужны раньше чем скрипт запускается, в самом вызове, иначе скрипт попадает в другую сессию/ветку процессов. Изолированную.