Você está tendo problemas com a idempotência porque está usando keysym
em vez de keycode
. Pense em keycode
como sendo uma atribuição de uma chave a uma função, enquanto keysym
é apenas um link de um nome de função para uma função real.
Quando você usa o keysym da seguinte forma:
keysym Caps_Lock = Multi_key
você essencialmente exclui o nome Caps_Lock
. Portanto, da próxima vez que você executar xmodmap
e referenciar Caps_Lock
nessa mesma linha, ficará confuso.
A maneira correta de fazer isso é reatribuir o código de tecla diretamente da seguinte maneira:
keycode 66 = Multi_key
Você pode obter o código-chave do comando xev
, por exemplo.