Definir DISPLAY não é suficiente; a variável só será definida dentro do shell. Para trabalhar em programas chamados a partir do shell, ele deve ser exportado.
export DISPLAY=:0
Ou você chama o wmctrl assim:
DISPLAY=:0 wmctrl
Quando tento executar wmctrl (por exemplo, wmctrl -l) de um tty fora de X (por exemplo, tty1), recebo "Não é possível abrir a exibição".
Eu tentei configurar as variáveis $ DISPLAY e $ XAUTHORITY para os valores que recebo de um emulador de terminal dentro do X, mas nada muda.