Выбор числа не всегда возвращает китайский символ с ibus системой транслитерации китайских иероглифов

Я использую Интеллектуальную Систему транслитерации китайских иероглифов Keyboard1 с ibus в Ubuntu для ввода китайских символов в мой документ.

input-method разработан таким способом, которым вводит pinyin связанный с символом, и затем можно выбрать его из списка символов с помощью номеров 0-9 на клавиатуре.

Пример:

enter image description here


Проблема: на прошлой неделе это иногда происходит, что, когда я нажимаю число от 0-9, метод ввода не приводит к китайскому символу, но цифре, которую я нажал вместо этого. Кроме того, дальнейший ввод с клавиатуры не интерпретирован как вход для ibus и просто записан как есть на экране, пока я вручную не переключаю режим ввода на pinyin снова.

Что я попробовал в порядке:

  • перезагрузка
  • удалите конфигурацию метода ввода и добавьте снова
  • переустановите ibus-систему-транслитерации-китайских-иероглифов

Ни один из них, казалось, не помог.

Q: Кто-либо знает, как решить эту проблему?


Как примечание стороны, там, кажется, a *ibus-engine-libpinyin.*.crash файл внутри /var/crash это могло быть связано с этой проблемой. Однако я не уверен, как я могу проследить этот отчет об ошибках онлайн и видеть, имеет ли он уже решение онлайн.

править: мое текущее обходное решение должно использовать fcitx вместо ibus .. хотя это действительно не решает проблему в программном обеспечении.

1 Интеллектуальная Клавиатура Системы транслитерации китайских иероглифов может быть установлена вызовом sudo apt-get install ibus-libpinyin и может быть расположен во Всей Установке-> Ввод текста-> Входные источники для использования-> + как китайский язык (Интеллектуальная Система транслитерации китайских иероглифов) (Ibus).

7
задан 19 July 2018 в 03:40

2 ответа

TL; DR: rm ~/.cache/ibus/libpinyin/*

Длинный ответ:

У меня есть подобная проблема кроме моей проблемы, не может возвратить любой китайский символ в следующем столбце>.

Первая вещь, которую я делаю, выполняется watch -n 3 -d 'ps auxww|tac' сравнить, что является различием между выводом, когда успех (первый столбец) и отказ (следующий столбец) происходит.

Я быстро заметил это /usr/lib/ibus/ibus-engine-libpinyin --ibus все еще работа успеха, но исчезает при отказе.

enter image description here

Это означает /usr/lib/ibus/ibus-engine-libpinyin --ibus обработайте катастрофический отказ когда избранный символ в следующем столбце.

Так как предыдущего процесса не стало, в то время как Super+Space для переключения нового процесса libpinyin выберите первый столбец, затем работайте ps auxww в другом терминале для знания последнего pid 6798, выполненный sudo strace -ff -vvv -p 6798 -s 1000000 понять процесс:

[pid  6798] lseek(14, 12288, SEEK_SET)  = 12288
[pid  6798] read(14, "", 4096)          = 0
[pid  6798] write(2, "ibus-engine-libpinyin: ../src/lookup/phonetic_lookup.h:901: bool pinyin::PhoneticLookup<nbest>::train_result3(const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints*, MatchResult) [with int nbest = 3; MatchResult = _GArray*; GArray = _GArray]: Assertion `m_user_bigram->store(last_token, user)' failed.\n", 323) = 323
[pid  6798] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f59a80e2000
[pid  6798] rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
[pid  6798] rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1], [], 8) = 0
[pid  6798] getpid()                    = 6798
[pid  6798] gettid()                    = 6798
[pid  6798] tgkill(6798, 6798, SIGABRT) = 0
[pid  6798] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
[pid  6798] --- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=6798, si_uid=1000} ---
[pid  6800] <... poll resumed> <unfinished ...>) = ?
[pid  6799] <... restart_syscall resumed>) = ?
[pid  6800] +++ killed by SIGABRT (core dumped) +++
[pid  6799] +++ killed by SIGABRT (core dumped) +++
+++ killed by SIGABRT (core dumped) +++

Вывод strace, остановленный после избранного символа в следующем столбце. Теперь я знаю, что это - выведенное ядро. Альтернативным путем является отладка с tail -f /var/log/syslog для знания это systemd-coredump.

Таким образом, я работаю coredumpctl list знать связанный coredump pid 6798:

Sun 2018-10-28 06:18:31 +08    6798  1000  1000   6 present   /usr/lib/ibus/ibus-engine-libpinyin

Я работаю coredumpctl dump 6798 --output alamak для сохранения coredump в alamak файл затем работайте gdb -q /usr/lib/ibus/ibus-engine-libpinyin alamak(исполняемый путь может добраться от ps auxww или coredumpctl list) исследовать coredump файл:

xb@dnxb:~$ gdb -q /usr/lib/ibus/ibus-engine-libpinyin alamak
expansion:  History expansion on command input is on.
filename:  The filename in which to record the command history is "/home/xiaobai/.gdb_history".
remove-duplicates:  The number of history entries to look back at for duplicates is 0.
save:  Saving of the history record on exit is on.
size:  The size of the command history is 10000000.
Reading symbols from /usr/lib/ibus/ibus-engine-libpinyin...(no debugging symbols found)...done.

warning: core file may not match specified executable file.
[New LWP 6798]
[New LWP 6800]
[New LWP 6799]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/lib/ibus/ibus-engine-libpinyin --ibus'.
Program terminated with signal SIGABRT, Aborted.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51      ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
[Current thread is 1 (Thread 0x7f59a80971c0 (LWP 6798))]

Попробовать thread apply all bt full и Войдите для навигации по следующей странице, я вижу некоторое интересное ключевое слово, которое является тем же с предыдущим strace write() вывод:

(gdb) thread apply all bt full

Thread 3 (Thread 0x7f59a36a9700 (LWP 6799)):
...
#1  0x00007f59a67cd801 in __GI_abort () at abort.c:79
        save_stage = 1
        act = 
          {__sigaction_handler = {sa_handler = 0x555b8ce58800, sa_sigaction = 0x555b8ce58800}, sa_mask = {__val = {0, 18446744073709551600, 0, 0, 0, 140733365772904, 0, 140733365772736, 140023023567312, 21474836480, 140023023552472, 0, 2476426370025201152, 140023023537428, 0, 140023023552472}}, sa_flags = -1488188568, sa_restorer = 0x7f59a74c0c00}
        sigs = {__val = {32, 0 <repeats 15 times>}}
#2  0x00007f59a67bd39a in __assert_fail_base (fmt=0x7f59a69447d8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x7f59a74c0c00 "m_user_bigram->store(last_token, user)", file=file@entry=0x7f59a74c0b68 "../src/lookup/phonetic_lookup.h", line=line@entry=901, function=function@entry=0x7f59a74c14e0 "bool pinyin::PhoneticLookup<nbest>::train_result3(const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints*, MatchResult) [with int nbest = 3; MatchResult = _GArray*; GArray = _GArra"...) at assert.c:92
        str = 0x555b8ce58800 ""
        total = 4096
#3  0x00007f59a67bd412 in __GI___assert_fail (assertion=0x7f59a74c0c00 "m_user_bigram->store(last_token, user)", file=0x7f59a74c0b68 "../src/lookup/phonetic_lookup.h", line=901, function=0x7f59a74c14e0 "bool pinyin::PhoneticLookup<nbest>::train_result3(const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints*, MatchResult) [with int nbest = 3; MatchResult = _GArray*; GArray = _GArra"...) at assert.c:101
#4  0x00007f59a7476a71 in pinyin_train () at /usr/lib/x86_64-linux-gnu/libpinyin.so.13
#5  0x0000555b8c7e5689 in  ()

Теперь основное ключевое слово, которое вызывает coredump, было подтверждено, Google const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints*, будет нашел этот поток отчета об ошибках:

Я выполнил libpinyin в терминале и получил следующее сообщение об ошибке:

debian-пользователь:~ $/usr/lib/ibus/ibus-engine-libpinyin - ibus ibus-engine-libpinyin:../src/lookup/phonetic_lookup.h:901: система транслитерации китайских иероглифов bool:: PhoneticLookup:: train_result3 (система транслитерации китайских иероглифов константы:: PhoneticKeyMatrix*, система транслитерации китайских иероглифов константы:: ForwardPhoneticConstraints*, MatchResult) [с интервалом nbest = 3; MatchResult = _GArray*; GArray = _GArray]: Утверждение 'm_user_bigram-> хранилище (last_token, пользователь)' перестало работать. Прерванный

Таким образом, эта ошибка связана с пользовательскими данными. При выборе фразы кроме первой libpinyin попытается сохранить ее в домашней папке. Если это не будет работать, то это перестанет работать и выйдет.

Можно хотеть проверить содержание в ~/.cache/ibus/libpinyin/. Я просто удалил все файлы в этой папке, и уничтожьте процесс ibus-engine-libpinyin для перезапуска ее. Они вещи возвращаются к нормальному снова. Я думаю проблема, которую Вы имеете, вероятно, совпадет с моим. Если не предоставьте сообщения об ошибках при выполнении ibus-engine-libpinyin в терминале

...

Я следовал Вашим инструкциям и удалил ~./cache/ibus/libpinyin папка. Проблема решена.

Вот именно, выполненный rm ~/.cache/ibus/libpinyin/*, и это решило проблему.

9
ответ дан 19 July 2018 в 03:40

1.

Более того, любой дальнейший ввод с клавиатуры не интерпретируется как ввод для ibus, а просто записывается на экране как есть, пока я снова вручную не переключу режим ввода на пиньинь. [ 1121]

В SunPinyin (со входом ibus) вы можете установить начальное состояние выхода для английского / китайского. Это не работает на IBus Pinyin 1.5.0.

2. По крайней мере, в качестве временного промежутка до устранения сбоя вы можете попытаться использовать Google Pinyin, WubiPinyin, SunPinyin или Pinyin в fcitx, что позволяет лучше управлять латинизированным вводом.

sudo apt install fcitx fcitx-googlepinyin fcitx-table-wbpy fcitx-pinyin fcitx-sunpinyin

Вам необходимо изменить метод ввода для fcitx в Системные настройки -> Языковая поддержка и перезагрузиться система (в моем случае достаточно выйти / войти). На иконке в трее будет отображаться кнопка клавиатура (fcitx) вместо кнопки En / Ru / Pl (ibus ]).

Затем найдите Google Pinyin, WubiPinyin, SunPinyin или Pinyin в Все настройки -> Ввод текста -> Используемые источники ввода -> + , набрав китайский для сужения список.

3. (Временное облегчение) Нажав Shift , вы можете изменить ввод вручную, а также пунктуацию и т. Д. . Проверьте: Все настройки -> Ввод текста -> Источник ввода < kbd> -> Настройки -> Ярлыки для назначения правильного ярлыка.

1
ответ дан 19 July 2018 в 03:40

Другие вопросы по тегам:

Похожие вопросы: