vim-xkbswitch
vim-xkbswitch copied to clipboard
Не удается заставить работать на ubuntu 18.04
Добрый день! Успешно использую ваш замечательный плагин под виндами, сейчас перехожу на ubuntu, но пока не удалось заставить его работать.
Сначала попытался собрать xkb-switch отсюда
https://github.com/ierton/xkb-switch/releases/tag/1.6.0 по инструкции
https://github.com/ierton/xkb-switch#installing
Но не удачно, на шаге
cmake ..
получаю ошибку
CMake Error at /usr/share/cmake-3.10/Modules/FindX11.cmake:429 (message): Could not find X11
Побороть эту ошибку не удалось.
Нашел этот пакет в PPA и установил
sudo add-apt-repository ppa:atareao/atareao
sudo apt update
sudo apt install xkb-switch
правда версия 1.4.0
xkb-switch -l
выдает
us
ru
us
После этого попробовал - плагин не работает. .vimrc:
let g:XkbSwitchEnabled = 1
let g:XkbSwitchIMappings = ['ru']
"плагин ставится с помощью Vandle
Plugin 'lyokha/vim-xkbswitch'
Прочитал в документации про
let g:XkbSwitchLib = '/usr/local/lib/libxkbswitch.so'
но у меня по этому пути такого файла нет.
Добрый день. Вам нужно посмотреть состав установленного пакета. Я, к сожалению, не знаю как это сделать, так как не пользуюсь Ubuntu. В списке файлов вы найдете эту библиотеку с полным путем. С малой долей вероятности вы ее можете не найти - это если пакет был собран без поддержки libxkbswitch.so, но это действительно маловероятно, поскольку библиотека должна собираться по умолчанию, но если ее в списке все-таки нет, вам нужно будет установить какую-либо другую сборку xkb-switch.
Я слышал, что с Ubuntu и последним Gnome 3 есть проблемы в самом xkb-switch, смотрите, например, здесь: https://www.linux.org.ru/forum/desktop/15229670. Я не пользуюсь ни Ubuntu ни Гномом (у меня установлена Fedora и Mate), поэтому мне затруднительно это исследовать и что-либо советовать. Но проверить вы сможете просто. Введите
xkb-switch -s ru
(если у вас была английская раскладка) и убедитесь что раскладка переключилась на русскую - если она не переключилась, то ваша система не может работать с xkb-switch и данный бэкенд, увы, не будет работать с vim-xkbswitch (а других бэкендов для vim-xkbswitch на Linux я не знаю).
Спасибо за советы, проверил, действительно xkb-switch той версии которая мне доступна (1.4) не работает в ubuntu 18.04 с gnome. Последнюю версию 1.6 собрать самому по инструкции с сайта не удалось, запросил помощи там, но легче не стало, сослались на dependency hell в убунту ... Попробовал с xubuntu на другом компьютере - все работает как надо. Буду переходить на нее.
Вот здесь кстати видел ссылки на 2 альтернативы xkb-switch github.com/ierton/xkb-switch/issues/34#issuecomment-511234580
Спасибо за ссылку. Но как я понял из обсуждений, проблема не в том, что xkb-switch плох, а в том, что плохи скорее Ubuntu и Gnome 3, в которых управление раскладкой через X интерфейс игнорируется. Соответственно, альтернативы, которые используют X, точно так же не будут работать. Возможный выход - увеличить популяцию зоопарка и написать кастомные переключатели раскладки для Ubuntu и Gnome 3, если это в принципе возможно. Ну или каким-то образом убедить разработчиков этих дистрибутивов исправить это досадное недоразумение. Это было бы здорово, если бы кто-то посмотрел в чем там все-таки проблема, а поскольку я ими (дистрибутивами) не пользуюсь, то я это сделать, к сожалению, не смогу.
Возможный выход - увеличить популяцию зоопарка и написать кастомные переключатели раскладки для Ubuntu и Gnome 3, если это в принципе возможно.
Мне кажется это наилучший вариант в данном случае, надежный в случае дальнейших изменений, а ваш плагин очень сильно облегчает жизнь.
Попробуйте плагин g3kb-switch вместо xkb-switch, он написан специально для Gnome 3. После установки просто добавьте строку
let g:XkbSwitchLib = '/usr/local/lib/libg3kbswitch.so'
в ваш .vimrc.
У меня похожая проблема. Ubuntu 19.10, использую Sway/Wayland. Скомпилировал g3kb-switch, при вызове из командной строки выдает Failed to build keyboard layouts map!
Эта штука работает с Gnome Shell, если у вас он не включен, то это ожидаемый результат.
@Rom888 У вас g3kb-switch работает? Или вы уже не на Gnome 3?
Эта штука работает с Gnome Shell, если у вас он не включен, то это ожидаемый результат.
Переключился в Gnome Shell - то же самое. Причем и в Gnome/X11, и в Gnome/Wayland.
xkb-switch тоже не помогает :( В Gnome/X11 xkb-switch -l
выдает два us
вместо us
и ru
, а в Gnome/Wayland и Sway/Wayland выдает только один us
. Буду рад наводкам в плане запуска вашего vim-плагина под Sway/Wayland.
Вижу новый issue в репозитории g3kb-switch, буду следить там.
@Galicarnax, в issue на который вы сослались в комментах есть две команды gdbus. Что они возвращают у вас? В случае Sway и Gnome Shell отдельно.
В случае Sway обе возвращают:
Error: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.Shell was not provided by any .service files
В случае гнома:
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().currentSource.id" (true, '"us"')
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "ids = [];for (i in imports.ui.status.keyboard.getInputSourceManager().inputSources){ids.push({key:i, value:imports.ui.status.keyboard.getInputSourceManager().inputSources[i].id})};ids" (false, 'ReferenceError: assignment to undeclared variable ids')
Но меня интересует именно Sway. Похоже, там g3kb-switch
дейтсивтельно не поможет... Может, необязятально, чтобы был запущен весь гном-шел? Может, какой-нибудь environment-переменной будет достаточно? Существуют ли еще варианты, кроме xkb-switch и g3kb-switch?
Да, в Sway это в текущем виде работать не будет, это видно из вашего ответа. Однако, если для переключалки в Sway есть dbus интерфейс, то эту программу можно будет приспособить.
Кстати, спасибо за ответ в варианте для Gnome Shell: я закоммитил изменения в g3kb-switch благодаря вашей наводке, если хотите, можете проверить.
@Rom888 У вас g3kb-switch работает? Или вы уже не на Gnome 3?
У меня сейчас Ubuntu 19.10, базовый десктоп с gnome 3.34.1 Собрал и установил 15 минут назад. Все собралось и прекрасно работает, как так
g3kb-switch -s ru
g3kb-switch -s us
так и с плагином для gvim. Огромное спасибо за эту штуку!!!
Я бы еще в инструкцию по сборке предложил бы добавить это
sudo apt-get install libglib2.0-dev
иначе у меня была ошибка
None of the required 'gio-2.0' found
Однако, если для переключалки в Sway есть dbus интерфейс, то эту программу можно будет приспособить.
А как можно узнать, есть ли dbus-интерфейс? Всё, что я знаю о клавиатуре в Sway, это то, что в sway-конфиге я прописываю
input * {
xkb_layout us,ru
xkb_options grp:win_space_toggle
}
Это я не знаю. Я случайно узнал, что существует такой Sway на прошлой неделе, когда пытался реализовать этот свитчер через Xkbcommon и Wayland compositor (как вариант) ))
@Rom888, да, наверное добавлю в требования, программа требует devel пакет glib-2.0, gio-2.0 в него входит.
Добавил документацию о пререквизите пакета разработки glib-2.0
... пытался реализовать этот свитчер через Xkbcommon и Wayland compositor
Кстати это, как я понял, наиболее правильный путь реализовать такой свитчер для Sway.
Как успехи со Sway?
Увы, никак. Я уже полностью перешел на Sway, и отсутствие вот такой удобной автопереключалки в vim-е - самый огорчительный момент. Я сам пишу на С/С++, но никогда не работал на уровне DBus и вообще IPC. Поэтому без каких-то конкретных наводок мне самому это вряд ли залатать в разумные сроки.
у sway есть вот такие комманды для смены раскладки:
swaymsg input type:keyboard xkb_layout ru
Никак не поможет?
у sway есть вот такие комманды для смены раскладки:
swaymsg input type:keyboard xkb_layout ru
Никак не поможет?
должно помочь, я написал у себя в конфиге "однострочник", который при выходе из инсерт мода ставит англ раскладку, а при входе - восстанавливает предыдущую заюзанную в инсерт моде:
au InsertLeave * let lastLangIndex=system('swaymsg -t get_inputs | grep -m1 "xkb_active_layout_index" | grep -oP "\d+"') | call jobstart('swaymsg input "* xkb_switch_layout 0"')
au InsertEnter * :if exists("lastLangIndex") | call jobstart('swaymsg input "* xkb_switch_layout ' . lastLangIndex . '"') | endif