Что делать если у вас ебашит русская раскладка в современных VNC типа TigerVNC (древнеговнище неподвержено по причинам описанным в конце):
setxkbmap -keycodes "xfree86(basic)+aliases(qwerty)" -layout us
на стороне VNC-сервера.
Почему это работает так:
События ввода с клавиатуры в VNC оперируют кодами символов (прям просто X11 keysyms).
Когда tigervnc получает символ, который есть в текущей активной раскладке X-сервера - он в обратную сторону маппит его на keycode, для X11-клиентов всё выглядит хорошо.
Когда он получает символ, которого нет в текущей раскладке - он придумывает этому символу keycode из свободных, назначает туда, маппит.
Но вот беда: keycode в иксах всего 255 (на самом деле в такой конфигурации даже 248), а заняты в дефолтной конфигурации из них 222.
т.е. под русскую раскладку у вас остается всего 26 символов - 7 букв не входят. Если VNC пойдет смаппит еще какую-нибудь хуйню кроме букв (№ например), то еще больше букв не войдут.
Если на сервере -layout us, будет работать английская, ебашить будет русская, если на сервере русская - наоборот. -layout us,ru и -layout ru,us не помогут, неактивные раскладки видимо не считаются.
По дефолту Xtigervnc, как и обычные иксы на линуксе, сейчас юзает таблицу evdev, в которую скопипащена половина всего linux/input-event-codes.h и КУЧА места занята всяким мультимедиа-говнищем (KEY_EJECTCD, KEY_COFFEE, KEY_BASSBOOST, KEY_BLUETOOTH, ...), которым при подключении по VNC мы готовы пожертвовать.
К счастью, из Xorg не выпилили (и наверное никода не выпилят) старые таблицы времен XFree86, которые содержат только самое необходимое и дают нам 112 ничем не заюзанных кодов.