vim-xkbswitch icon indicating copy to clipboard operation
vim-xkbswitch copied to clipboard

Не удается заставить работать на ubuntu 18.04

Open Rom888 opened this issue 4 years ago • 25 comments

Добрый день! Успешно использую ваш замечательный плагин под виндами, сейчас перехожу на 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' но у меня по этому пути такого файла нет.

Rom888 avatar Sep 19 '19 09:09 Rom888

Добрый день. Вам нужно посмотреть состав установленного пакета. Я, к сожалению, не знаю как это сделать, так как не пользуюсь 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 я не знаю).

lyokha avatar Sep 19 '19 12:09 lyokha

Спасибо за советы, проверил, действительно 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

Rom888 avatar Sep 20 '19 14:09 Rom888

Спасибо за ссылку. Но как я понял из обсуждений, проблема не в том, что xkb-switch плох, а в том, что плохи скорее Ubuntu и Gnome 3, в которых управление раскладкой через X интерфейс игнорируется. Соответственно, альтернативы, которые используют X, точно так же не будут работать. Возможный выход - увеличить популяцию зоопарка и написать кастомные переключатели раскладки для Ubuntu и Gnome 3, если это в принципе возможно. Ну или каким-то образом убедить разработчиков этих дистрибутивов исправить это досадное недоразумение. Это было бы здорово, если бы кто-то посмотрел в чем там все-таки проблема, а поскольку я ими (дистрибутивами) не пользуюсь, то я это сделать, к сожалению, не смогу.

lyokha avatar Sep 20 '19 14:09 lyokha

Возможный выход - увеличить популяцию зоопарка и написать кастомные переключатели раскладки для Ubuntu и Gnome 3, если это в принципе возможно.

Мне кажется это наилучший вариант в данном случае, надежный в случае дальнейших изменений, а ваш плагин очень сильно облегчает жизнь.

Rom888 avatar Sep 20 '19 16:09 Rom888

Попробуйте плагин g3kb-switch вместо xkb-switch, он написан специально для Gnome 3. После установки просто добавьте строку

let g:XkbSwitchLib = '/usr/local/lib/libg3kbswitch.so'

в ваш .vimrc.

lyokha avatar Dec 16 '19 12:12 lyokha

У меня похожая проблема. Ubuntu 19.10, использую Sway/Wayland. Скомпилировал g3kb-switch, при вызове из командной строки выдает Failed to build keyboard layouts map!

Galicarnax avatar Dec 16 '19 17:12 Galicarnax

Эта штука работает с Gnome Shell, если у вас он не включен, то это ожидаемый результат.

lyokha avatar Dec 16 '19 18:12 lyokha

@Rom888 У вас g3kb-switch работает? Или вы уже не на Gnome 3?

lyokha avatar Dec 16 '19 20:12 lyokha

Эта штука работает с Gnome Shell, если у вас он не включен, то это ожидаемый результат.

Переключился в Gnome Shell - то же самое. Причем и в Gnome/X11, и в Gnome/Wayland.

Screenshot

xkb-switch тоже не помогает :( В Gnome/X11 xkb-switch -l выдает два us вместо us и ru, а в Gnome/Wayland и Sway/Wayland выдает только один us. Буду рад наводкам в плане запуска вашего vim-плагина под Sway/Wayland.

Galicarnax avatar Dec 17 '19 03:12 Galicarnax

Вижу новый issue в репозитории g3kb-switch, буду следить там.

Galicarnax avatar Dec 17 '19 04:12 Galicarnax

@Galicarnax, в issue на который вы сослались в комментах есть две команды gdbus. Что они возвращают у вас? В случае Sway и Gnome Shell отдельно.

lyokha avatar Dec 17 '19 05:12 lyokha

В случае 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?

Galicarnax avatar Dec 17 '19 05:12 Galicarnax

Да, в Sway это в текущем виде работать не будет, это видно из вашего ответа. Однако, если для переключалки в Sway есть dbus интерфейс, то эту программу можно будет приспособить.

lyokha avatar Dec 17 '19 05:12 lyokha

Кстати, спасибо за ответ в варианте для Gnome Shell: я закоммитил изменения в g3kb-switch благодаря вашей наводке, если хотите, можете проверить.

lyokha avatar Dec 17 '19 06:12 lyokha

@Rom888 У вас g3kb-switch работает? Или вы уже не на Gnome 3?

У меня сейчас Ubuntu 19.10, базовый десктоп с gnome 3.34.1 Собрал и установил 15 минут назад. Все собралось и прекрасно работает, как так

g3kb-switch -s ru
g3kb-switch -s us

так и с плагином для gvim. Огромное спасибо за эту штуку!!!

Rom888 avatar Dec 17 '19 09:12 Rom888

Я бы еще в инструкцию по сборке предложил бы добавить это sudo apt-get install libglib2.0-dev иначе у меня была ошибка None of the required 'gio-2.0' found

Rom888 avatar Dec 17 '19 09:12 Rom888

Однако, если для переключалки в Sway есть dbus интерфейс, то эту программу можно будет приспособить.

А как можно узнать, есть ли dbus-интерфейс? Всё, что я знаю о клавиатуре в Sway, это то, что в sway-конфиге я прописываю

input * {
    xkb_layout us,ru
    xkb_options grp:win_space_toggle
}

Galicarnax avatar Dec 17 '19 09:12 Galicarnax

Это я не знаю. Я случайно узнал, что существует такой Sway на прошлой неделе, когда пытался реализовать этот свитчер через Xkbcommon и Wayland compositor (как вариант) ))

lyokha avatar Dec 17 '19 10:12 lyokha

@Rom888, да, наверное добавлю в требования, программа требует devel пакет glib-2.0, gio-2.0 в него входит.

lyokha avatar Dec 17 '19 12:12 lyokha

Добавил документацию о пререквизите пакета разработки glib-2.0

lyokha avatar Dec 17 '19 12:12 lyokha

... пытался реализовать этот свитчер через Xkbcommon и Wayland compositor

Кстати это, как я понял, наиболее правильный путь реализовать такой свитчер для Sway.

lyokha avatar Dec 17 '19 13:12 lyokha

Как успехи со Sway?

nacknime-official avatar May 06 '20 16:05 nacknime-official

Увы, никак. Я уже полностью перешел на Sway, и отсутствие вот такой удобной автопереключалки в vim-е - самый огорчительный момент. Я сам пишу на С/С++, но никогда не работал на уровне DBus и вообще IPC. Поэтому без каких-то конкретных наводок мне самому это вряд ли залатать в разумные сроки.

Galicarnax avatar May 06 '20 17:05 Galicarnax

у sway есть вот такие комманды для смены раскладки:

swaymsg input type:keyboard xkb_layout ru

Никак не поможет?

timsofteng avatar Jan 08 '22 20:01 timsofteng

у 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

nacknime-official avatar Jan 09 '22 06:01 nacknime-official