Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Rom888 opened this issue Sep 19, 2019 · 25 comments
Open

Comments

@Rom888
Copy link

Rom888 commented Sep 19, 2019

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

@lyokha
Copy link
Owner

lyokha commented Sep 19, 2019

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

@Rom888
Copy link
Author

Rom888 commented Sep 20, 2019

Спасибо за советы, проверил, действительно xkb-switch той версии которая мне доступна (1.4) не работает в ubuntu 18.04 с gnome.
Последнюю версию 1.6 собрать самому по инструкции с сайта не удалось, запросил помощи там, но легче не стало, сослались на dependency hell в убунту ...
Попробовал с xubuntu на другом компьютере - все работает как надо.
Буду переходить на нее.

Вот здесь кстати видел ссылки на 2 альтернативы xkb-switch
github.com/sergei-mironov/xkb-switch/issues/34#issuecomment-511234580

@lyokha
Copy link
Owner

lyokha commented Sep 20, 2019

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

@Rom888
Copy link
Author

Rom888 commented Sep 20, 2019

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

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

@lyokha
Copy link
Owner

lyokha commented Dec 16, 2019

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

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

в ваш .vimrc.

@Galicarnax
Copy link

Galicarnax commented Dec 16, 2019

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

@lyokha
Copy link
Owner

lyokha commented Dec 16, 2019

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

@lyokha
Copy link
Owner

lyokha commented Dec 16, 2019

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

@Galicarnax
Copy link

Эта штука работает с 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
Copy link

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

@lyokha
Copy link
Owner

lyokha commented Dec 17, 2019

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

@Galicarnax
Copy link

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

@lyokha
Copy link
Owner

lyokha commented Dec 17, 2019

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

@lyokha
Copy link
Owner

lyokha commented Dec 17, 2019

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

@Rom888
Copy link
Author

Rom888 commented Dec 17, 2019

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

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

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

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

@Rom888
Copy link
Author

Rom888 commented Dec 17, 2019

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

@Galicarnax
Copy link

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

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

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

@lyokha
Copy link
Owner

lyokha commented Dec 17, 2019

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

@lyokha
Copy link
Owner

lyokha commented Dec 17, 2019

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

@lyokha
Copy link
Owner

lyokha commented Dec 17, 2019

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

@lyokha
Copy link
Owner

lyokha commented Dec 17, 2019

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

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

@nacknime-official
Copy link

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

@Galicarnax
Copy link

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

@timsofteng
Copy link

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

swaymsg input type:keyboard xkb_layout ru

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

@nacknime-official
Copy link

у 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants