web-dev-qa-db-ja.com

数字を選択しても、ibus pinyinで漢字が常に返されるとは限りません

使用するIntelligent Pinyin Keyboard1 Ubuntuでibusを使用して、中国語の文字をドキュメントに入力します。

input-methodは、文字に関連付けられたpinyinを入力し、数字を使用して文字のリストから選択できるように設計されています -9 キーボードで。

例:

enter image description here


問題:先週、時々から数字を押すと -9 インプットメソッドは漢字を生成せず、代わりに私が押した数字を生成します。さらに、それ以上のキーボード入力はibusの入力として解釈されず、入力モードを手動でpinyinに再び切り替えるまで、画面上にそのまま書き込まれます。

私が試したもの:

  • リブート
  • 入力メソッドの構成を削除して、再度追加します
  • ibus-pinyinを再インストール

これらはどれも役に立たなかったようです。

Q:誰もがこの問題を解決する方法を知っていますか?


補足として、この問題に関連する可能性のある*ibus-engine-libpinyin.*.crash内に/var/crashファイルがあるようです。ただし、このバグレポートをオンラインでトレースして、すでにオンラインで解決策があるかどうかを確認する方法はわかりません。

edit:私の現在の回避策は、fcitxの代わりにibusを使用することです。ソフトウェア。

1 Intelligent Pinyin Keyboardは、Sudo apt-get install ibus-libpinyinの呼び出しによってインストールでき、次の場所に配置できます。 All Setting-->Text Entry-->Input sources to use-->+ asChinese(Intelligent Pinyin)(Ibus)

7
Patrick Trentin

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を実行して最新のpid6798であることを確認し、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を実行して、関連するコアダンプpid6798であることを確認します。

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

coredumpctl dump 6798 --output alamakを実行してコアダンプをalamakファイルに保存し、gdb -q /usr/lib/ibus/ibus-engine-libpinyin alamak(実行可能パスはps auxwwまたはcoredumpctl listから取得できます)を実行してコアダンプファイルを調べます。

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をお試しください Enter 次のページに移動するために、前のstracewrite()出力と同じ興味深いキーワードを見ることができます。

(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  ()

これで、コアダンプを引き起こす主なキーワードであるgoogle const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints*が確認されました。これは バグレポートスレッド

ターミナルでlibpinyinを実行すると、次のエラーメッセージが表示されました。

debian-user:〜$/usr/lib/ibus/ibus-engine-libpinyin --ibus ibus-engine-libpinyin:../src/lookup/phonetic_lookup.h:901:bool pinyin :: PhoneticLookup :: train_result3(const pinyin :: PhoneticKeyMatrix *、const pinyin :: ForwardPhoneticConstraints *、MatchResult)[int nbest = 3; MatchResult = _GArray *; GArray = _GArray]:アサーション「m_user_bigram-> store(last_token、user)」が失敗しました。中止

そのため、このエラーはユーザーデータに関連しています。最初のフレーズ以外のフレーズを選択すると、libpinyinはそれをホームフォルダーに保存しようとします。動作しない場合、失敗して終了します。

〜/ .cache/ibus/libpinyin /の内容を確認することもできます。このフォルダー内のすべてのファイルを削除し、ibus-engine-libpinyinプロセスを強制終了して再起動しました。彼らは再び正常に戻ります。あなたが抱えている問題は私のものと同じだと思います。そうでない場合は、ターミナルでibus-engine-libpinyinを実行するときにエラーメッセージを提供してください

...

あなたの指示に従い、〜。/ cache/ibus/libpinyinフォルダーを削除しました。問題は解決しました。

それで、rm ~/.cache/ibus/libpinyin/*を実行し、問題を修正しました。

9
林果皞

1。

さらに、それ以上のキーボード入力はibusの入力として解釈されず、入力モードを手動でピンインに再度切り替えるまで画面上にそのまま書き込まれます。

SunPinyinibus入力付き)では、English/Chineseの出力の初期状態を設定できます。IBus Pinyin 1.5.0では機能しません。

2。少なくともクラッシュが修復されるまでの一時停止として、WubiPinyinの下でGoogle PinyinSunPinyinPinyin、またはfcitxを使用できます。これにより、ローマ字入力をより適切に管理できます。

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

fcitxの入力メソッドを変更する必要があります System Settings-->Language Support そしてシステムを再起動します(私の場合は、ログアウト/ログインで十分です)。トレイアイコンが表示されます keyboard (fcitx)の代わりに En / Ru / Pl ボタン(ibus)。

次に、Google PinyinWubiPinyinSunPinyin、またはPinyinを探します All Setting-->Text Entry-->Input sources to use-->+Chineseと入力してリストを絞り込みます。

(一時的な円滑化)を押して Shift 入力と句読点etcを手動で変更できます。小切手: All Settings-->Text Entry-->Input source-->Preferences-->Shortcuts 適切なショートカットを割り当てます。

1
Christianus