Keycode da chave 3 / # é 12:
]$ xmodmap -pk | grep "(3)"
12 0x0033 (3) 0x0023 (numbersign) 0x0033 (3) 0x0023 (numbersign)
( xmodmap -pk exibe o mapeamento atual)
Você precisa alterar o mapeamento dessa chave quando pressionada com shift, de modo que ela produza ~ em vez de # . Você faz isso assim:
echo "keycode 12 = 3 asciitilde" >> ~/.Xmodmap
xmodmap ~/.Xmodmap
Para redefinir o mapeamento para o original, remova a linha acima de ~/.Xmodmap e faça:
]$ xmodmap -e "keycode 12 = 3 numbersign"