xrandr precisa da variável $DISPLAY
configurada para informar qual sessão X está manipulando, e isso não está sendo definido no ambiente cron.
xrandr pode estar trabalhando em sua sessão X local padrão, ou uma segunda que você iniciou executando startx
de um TTY, ou uma sessão para um display remoto sendo encaminhado via SSH, ou uma sessão X aninhada rodando dentro de outro um usando o Xnest, etc. Sem a variável de ambiente $DISPLAY
(ou o argumento de linha de comando --display
) ele não pode saber em qual sessão se conectar, então ele é liberado.
Por exemplo, o comando a seguir pode resolver seu problema:
DISPLAY=:0 /home/user/screens.sh