Wenn Sie eine Nummer auswählen, wird mit ibus pinyin nicht immer ein chinesisches Schriftzeichen zurückgegeben

7

Ich verwende Intelligent Pinyin Keyboard 1 mit ibusin Ubuntu, um chinesische Schriftzeichen in mein Dokument einzugeben.

Das input-methodist so gestaltet, dass man das pinyinmit einem Zeichen verknüpfte Zeichen eingibt und es dann mithilfe von Zahlen aus einer Liste von Zeichen auswählen kann 0- 9auf der Tastatur.

Beispiel:

Geben Sie hier die Bildbeschreibung ein


Problem: In der letzten Woche kommt es manchmal vor, dass beim Drücken einer Zahl von 0- 9die Eingabemethode kein chinesisches Zeichen ergibt, sondern die Ziffer, die ich stattdessen gedrückt habe. Darüber hinaus wird jede weitere Tastatureingabe nicht als Eingabe für ibus interpretiert und lediglich so wie sie ist auf dem Bildschirm geschrieben, bis ich den Eingabemodus manuell pinyinwieder aufschalte .

Was ich versucht habe, um:

  • Neustart
  • Entfernen Sie die Konfiguration der Eingabemethode und fügen Sie sie erneut hinzu
  • Installieren Sie ibus-pinyin neu

Nichts davon schien zu helfen.

F: Weiß jemand, wie man dieses Problem löst?


Als Randnotiz scheint es eine *ibus-engine-libpinyin.*.crashDatei zu geben /var/crash, die mit diesem Problem zusammenhängen könnte. Ich bin mir jedoch nicht sicher, wie ich diesen Fehlerbericht online verfolgen und prüfen kann, ob bereits eine Lösung online verfügbar ist.

Bearbeiten: Meine aktuelle Problemumgehung ist die Verwendung fcitxanstelle von ibus.., obwohl dies das Problem in der Software nicht wirklich löst.

1 Intelligente Pinyin-Tastatur kann durch Aufrufen der installiert werden sudo apt-get install ibus-libpinyinund kann All Setting-->Text Entry-->Input sources to use-->+als Chinesisch (Intelligent Pinyin) (Ibus) gespeichert werden .

Patrick Trentin
quelle
Ich benutze IBus Pinyin 1.5.0 und SunPinyin . Was meinst du mit der intelligenten Pinyin-Tastatur ? Wie installiere ich das? Welche Ubuntu- Version verwenden Sie?
Christianus
Hast du es versucht sudo apt-get install ibus-pinyin ibus-libpinyin --reinstall?
Christianus
Siehe Punkt. 3 meiner Antwort.
Christianus

Antworten:

9

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

Lange Antwort:

Ich habe ein ähnliches Problem, außer dass mein Problem kein chinesisches Zeichen in der nächsten Spalte zurückgeben kann > .

Als erstes führe ich aus, um watch -n 3 -d 'ps auxww|tac' zu vergleichen, was der Unterschied zwischen der Ausgabe ist, wenn Erfolg (erste Spalte) und Fehler (nächste Spalte) auftreten.

Ich bemerkte schnell, dass es /usr/lib/ibus/ibus-engine-libpinyin --ibusimmer noch erfolgreich läuft, aber bei Misserfolg verschwindet.

Geben Sie hier die Bildbeschreibung ein

Dies bedeutet einen /usr/lib/ibus/ibus-engine-libpinyin --ibusProzessabsturz, wenn das Zeichen in der nächsten Spalte ausgewählt wird.

Da der vorherige Prozess gegangen ist, während Super+Spaceauf Toggle neuen libpinyin Prozess, die erste Spalte auswählen, dann lief ps auxwwin einem anderen Endgerät der neueste zu wissen pidist 6798, führt sudo strace -ff -vvv -p 6798 -s 1000000den Prozess zu verstehen:

[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) +++

Die Strace-Ausgabe wurde nach Auswahl des Zeichens in der nächsten Spalte gestoppt. Jetzt weiß ich, dass der Kern abgeladen ist . Ein alternativer Weg ist das Debuggen mit, um tail -f /var/log/syslogzu wissen, dass es ist systemd-coredump.

Also coredumpctl listrenne ich, um zu wissen, dass der Coredump Folgendes pidist 6798:

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

Ich coredumpctl dump 6798 --output alamakstarte, um Coredump in einer Alamak-Datei zu speichern, und führe dann aus gdb -q /usr/lib/ibus/ibus-engine-libpinyin alamak(der ausführbare Pfad kann von ps auxwwoder stammen coredumpctl list), um die Coredump-Datei zu untersuchen:

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

Versuchen thread apply all bt fullund die Enternächste Seite zu navigieren, kann ich einiges interessantes Stichwort sehen, die gleich mit dem vorherigen ist strace‚s write()Ausgang:

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

Jetzt wurde das Hauptschlüsselwort, das den Coredump verursacht, Google const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints*, bestätigt . Es wird dieser Fehlerbericht-Thread gefunden :

Ich habe libpinyin im Terminal ausgeführt und die folgende Fehlermeldung erhalten:

Debian-Benutzer: ~ $ / 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) [mit int nbest = 3; MatchResult = _GArray *; GArray = _GArray]: Die Behauptung "m_user_bigram-> store (last_token, user)" ist fehlgeschlagen. Abgebrochen

Dieser Fehler hängt also mit den Benutzerdaten zusammen. Wenn Sie eine andere als die erste Phrase auswählen, versucht libpinyin, sie in Ihrem Home-Ordner zu speichern. Wenn es nicht funktioniert, schlägt es fehl und wird beendet.

Möglicherweise möchten Sie den Inhalt in ~ / .cache / ibus / libpinyin / überprüfen. Ich habe einfach alle Dateien in diesem Ordner gelöscht und den ibus-engine-libpinyin-Prozess beendet, um ihn neu zu starten. Die Dinge normalisieren sich wieder. Ich denke, das Problem, das Sie haben, ist wahrscheinlich dasselbe wie meines. Wenn nicht, geben Sie bitte Fehlermeldungen an, wenn Sie ibus-engine-libpinyin im Terminal ausführen

...

Ich habe Ihre Anweisungen befolgt und den Ordner ~. / Cache / ibus / libpinyin gelöscht. Das Problem ist gelöst.

Das war's, lauf rm ~/.cache/ibus/libpinyin/*, und es hat das Problem behoben.

Obst
quelle
4
Ich bedanke mich ganz besonders dafür, dass Sie ausführlich erklärt haben, wie Sie das Problem lösen konnten.
Patrick Trentin
Gibt es eine Möglichkeit, den Betreuern mitzuteilen, dass dies tatsächlich ein ziemlich schwerwiegender Fehler ist und behoben werden sollte?
Gorkamorka
1

1.

Darüber hinaus wird jede weitere Tastatureingabe nicht als Eingabe für ibus interpretiert und lediglich so wie sie ist auf dem Bildschirm geschrieben, bis ich den Eingabemodus manuell wieder auf Pinyin umschalte.

In SunPinyin(mit der ibusEingabe) können Sie den Ausgangszustand einer Ausgabe für Englisch / Chinesisch einstellen . Es funktioniert nicht weiter IBus Pinyin 1.5.0.

2. Zumindest als Notlösung bis zur Reparatur des Absturzes können Sie versuchen , oder unter zu verwenden Google Pinyin, um die romanisierte Eingabe besser zu verwalten.WubiPinyinSunPinyinPinyinfcitx

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

Sie müssen die Eingabemethode für fcitxin ändern System Settings --> Language Supportund das System neu starten (in meinem Fall reicht es aus, sich abzumelden / anzumelden). Das Tray-Symbol zeigt keyboard( fcitx) anstelle der Taste En/ Ru/ Pl( ibus) an.

Dann suchen Sie nach Google Pinyin, WubiPinyin, SunPinyinoder Pinyinin All Setting --> Text Entry --> Input sources to use --> +, tippen Chinesisch die Liste zu verengen.

3. (Temporäre Erleichterung) Durch Drücken von können ShiftSie die Eingabe manuell sowie die Interpunktion usw. Ändern . Aktivieren Sie diese Option All Settings --> Text Entry --> Input source --> Preferences --> Shortcuts, um eine ordnungsgemäße Verknüpfung zuzuweisen.

Christianus
quelle
@Patrick: Welche virtuelle Tastatur wird verwendet? Ich benutze zum Beispiel Onboard .
Christianus
fcitxbietet Ihnen eine virtuelle Tastatur, ibusnur Eingabequellen.
Christianus
@PatrickTrentin: Ich bin froh, dass ich helfen konnte. Mein Rat: Entfernen Sie Ihre Kommentare in Zukunft nicht mehr. Die Aufzeichnung unseres Diskurses ist für zukünftige Benutzer auch dann nützlich, wenn jemand einen Fehler gemacht hat.
Christianus