7 votes

La sélection d'un nombre ne renvoie pas toujours un caractère chinois avec le pinyin ibus.

J'utilise Clavier pinyin intelligent 1 con ibus dans Ubuntu pour saisir des caractères chinois dans mon document.

En input-method est conçu de manière à ce que l'on tape l'un des éléments suivants pinyin associé à un caractère, puis on peut le sélectionner dans une liste de caractères à l'aide de chiffres. 0 - 9 sur le clavier.

Exemple :

enter image description here


Problème : au cours de la semaine dernière, il arrive parfois que lorsque j'appuie sur un numéro de 0 - 9 la méthode d'entrée ne donne pas un caractère chinois mais le chiffre que j'ai appuyé à la place. De plus, toute autre entrée au clavier n'est pas interprétée comme une entrée pour ibus, et simplement écrite telle quelle à l'écran jusqu'à ce que je change manuellement le mode d'entrée en pinyin encore.

Ce que j'ai essayé, dans l'ordre :

  • redémarrer
  • supprimer la configuration de la méthode d'entrée, et ajouter à nouveau
  • réinstaller ibus-pinyin

Rien de tout cela n'a semblé aider.

Q : Quelqu'un sait-il comment résoudre ce problème ?


En passant, il semble qu'il y ait un *ibus-engine-libpinyin.*.crash fichier à l'intérieur /var/crash qui pourraient être liés à ce problème. Cependant, je ne suis pas sûr de savoir comment retracer ce rapport de bogue en ligne et voir s'il existe déjà une solution en ligne.

éditer : ma solution actuelle consiste à utiliser fcitx 代わりに ibus bien que cela ne résolve pas vraiment le problème dans le logiciel.

1 Clavier pinyin intelligent peut être installé par l'invocation de la méthode sudo apt-get install ibus-libpinyin et peuvent être localisés dans All Setting-->Text Entry-->Input sources to use-->+ como Chinois (Pinyin intelligent) (Ibus) .

9voto

林果皞 Points 416

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

Longue réponse :

J'ai un problème similaire, sauf que mon problème est de ne pas pouvoir retourner un caractère chinois dans la colonne suivante. > .

La première chose que je fais est de lancer watch -n 3 -d 'ps auxww|tac' pour comparer quelle est la différence entre la sortie lorsque le succès (première colonne) et l'échec (colonne suivante) se produisent.

J'ai rapidement remarqué que /usr/lib/ibus/ibus-engine-libpinyin --ibus qui fonctionnent toujours en cas de succès mais disparaissent en cas d'échec.

enter image description here

Cela signifie que /usr/lib/ibus/ibus-engine-libpinyin --ibus le processus se bloque lorsque l'on sélectionne un caractère dans la colonne suivante.

Puisque le processus précédent a disparu, alors que Super+Space pour basculer le nouveau processus libpinyin, sélectionnez la première colonne, puis exécutez ps auxww dans un autre terminal pour connaître les dernières pid est 6798 , courir sudo strace -ff -vvv -p 6798 -s 1000000 pour comprendre le processus :

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

La sortie de strace s'est arrêtée après avoir sélectionné le caractère de la colonne suivante. Je sais maintenant que c'est le noyau déversé . Une autre solution consiste à déboguer avec tail -f /var/log/syslog pour savoir que c'est systemd-coredump .

Donc je cours coredumpctl list pour connaître le coredump lié pid est 6798 :

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

Je cours coredumpctl dump 6798 --output alamak pour sauvegarder le coredump dans un fichier alamak, puis exécutez gdb -q /usr/lib/ibus/ibus-engine-libpinyin alamak (le chemin de l'exécutable peut être obtenu à partir de ps auxww o coredumpctl list ) pour examiner le fichier 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))]

Essayez thread apply all bt full y Enter pour naviguer sur la page suivante, je peux voir quelques mots-clés intéressants qui sont les mêmes que ceux de la page précédente. strace 's write() sortie :

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

Maintenant, le mot-clé principal qui cause la corédectomie a été confirmé, google. const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints* trouvera ceci fil de rapport de bug :

J'ai lancé libpinyin dans le terminal et j'ai obtenu le message d'erreur suivant :

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*, constantes pinyin::ForwardPhoneticConstraints*, MatchResult) [avec int nbest = 3 ; MatchResult = _GArray* ; GArray = _GArray] : L'assertion `m_user_bigram->store(last_token, user)' a échoué. Abandonné

Cette erreur est donc liée aux données de l'utilisateur. Lorsque vous sélectionnez une phrase autre que la première, libpinyin essaiera de la stocker dans votre dossier dans votre dossier personnel. Si cela ne fonctionne pas, elle échouera et se terminera.

Vous pouvez vérifier le contenu de ~/.cache/ibus/libpinyin/ . I simplement supprimé tous les fichiers dans ce dossier et tué le processus ibus-engine-libpinyin pour le redémarrer. Les choses sont redevenues normales. Je pense que que le problème que vous avez est probablement le même que le mien. Si ce n'est pas le cas, veuillez fournir les messages d'erreur lorsque vous exécutez ibus-engine-libpinyin dans le terminal

...

J'ai suivi vos instructions et supprimé le dossier ~./cache/ibus/libpinyin . Le problème est résolu.

C'est ça, cours rm ~/.cache/ibus/libpinyin/* et ça a réglé le problème.

1voto

Christianus Points 561

1.

De plus, toute autre entrée au clavier n'est pas interprétée comme une entrée pour ibus, et simplement écrite telle quelle à l'écran jusqu'à ce que je passe manuellement en mode pinyin. le mode d'entrée en pinyin.

Dans le SunPinyin (avec le ibus entrée), vous pouvez définir l'état initial d'une sortie pour Anglais/Chinois. Il ne fonctionne pas sur IBus Pinyin 1.5.0 .

2. Au moins en tant que solution provisoire jusqu'à ce que le crash soit réparé, vous pouvez essayer d'utiliser Google Pinyin , WubiPinyin , SunPinyin o Pinyin sous fcitx qui est capable de mieux gérer l'entrée romanisée.

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

Vous devez modifier la méthode d'entrée pour le fcitx dans le System Settings --> Language Support et redémarrer le système (dans mon cas, il suffit de se déconnecter et de se connecter). L'icône de la barre d'état affiche keyboard ( fcitx ) à la place de En / Ru / Pl bouton ( ibus ).

Alors, cherchez Google Pinyin , WubiPinyin , SunPinyin o Pinyin en All Setting --> Text Entry --> Input sources to use --> + , en train de taper Chinois pour réduire la liste.

3. (Facilitation temporaire) En appuyant sur Shift vous pouvez modifier l'entrée manuellement ainsi que la ponctuation etc. . Vérifiez : All Settings --> Text Entry --> Input source --> Preferences --> Shortcuts pour attribuer un raccourci approprié.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X