2

Я использую среду X с двойной раскладкой клавиатуры: us,il . Теперь в некоторых моих приложениях и в макете il символы иврита не регистрируются, а знаки препинания - нет. В других приложениях ивритские символы хорошо регистрируются и добавляются к любому тексту, который я набираю. Английская раскладка отлично работает. Я предоставлю полную информацию о моей конфигурации ниже.

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

Подробности о моей настройке

  • Физическая раскладка клавиатуры: стандартная US 104-клавишная (как эта).
  • Распространение ОС: Devuan 2.0 ASCII (~ = Debian 9.0 Stretch)
  • Конфигурация XKB:

    $ setxkbmap -query
    rules:      evdev
    model:      pc105
    layout:     us,il
    variant:    ,
    options:    grp:alt_shift_toggle,grp_led:scroll
    
  • Окружение рабочего стола: это происходит со мной как с Cinnamon, так и с LXQt; еще не пробовал других.

  • Приложения, отклоняющие ивритские символы: Cinnamon's Alt+F2 launcher; Leafpad; GEdit, xterm.
  • Приложения, принимающие ивритские символы: KWrite, GNOME Terminal, LibreOffice, Firefox, Kolourpaint, lxterminal, Konsole.

xev output

Вывод при нажатии на клавиатуре:

KeyRelease event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369470632, (96,-25), root:(146,62),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369474392, (96,-25), root:(146,62),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

Выход при переключении раскладки клавиатуры:

KeyPress event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369547896, (75,-23), root:(125,64),
    state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369548008, (75,-23), root:(125,64),
    state 0x8, keycode 62 (keysym 0xfe08, ISO_Next_Group), same_screen YES,
    XKeysymToKeycode returns keycode: 50
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

PropertyNotify event, serial 34, synthetic NO, window 0x7e00001,
    atom 0x176 (XKLAVIER_STATE), time 369548013, state PropertyNewValue

PropertyNotify event, serial 34, synthetic NO, window 0x7e00001,
    atom 0x176 (XKLAVIER_STATE), time 369548013, state PropertyNewValue

KeyRelease event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369548072, (75,-23), root:(125,64),
    state 0x2008, keycode 62 (keysym 0xfe08, ISO_Next_Group), same_screen YES,
    XKeysymToKeycode returns keycode: 50
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369548168, (75,-23), root:(125,64),
    state 0x2008, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Выход при повторном нажатии на клавиатуре (эта клавиша также соответствует Hebrew буква голени, ש):

KeyPress event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369560440, (75,-23), root:(125,64),
    state 0x2000, keycode 38 (keysym 0xcf9, hebrew_shin), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369560504, (75,-23), root:(125,64),
    state 0x2000, keycode 38 (keysym 0xcf9, hebrew_shin), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

xmodmap -pke

Часть вывода xmodmap -pke:

... etc. etc. ...
keycode  24 = q Q slash Q U05C2
keycode  25 = w W apostrophe W U05C1
keycode  26 = e E hebrew_qoph E U05B8
keycode  27 = r R hebrew_resh R U05B3
keycode  28 = t T hebrew_aleph T
keycode  29 = y Y hebrew_tet Y U05F0
keycode  30 = u U hebrew_waw U U05B9
keycode  31 = i I hebrew_finalnun I
keycode  32 = o O hebrew_finalmem O
keycode  33 = p P hebrew_pe P U05B7
keycode  34 = bracketleft braceleft bracketright braceright U05B2
keycode  35 = bracketright braceright bracketleft braceleft U05BF
keycode  36 = Return NoSymbol Return
keycode  37 = Control_L NoSymbol Control_L
keycode  38 = a A hebrew_shin A U05B0
keycode  39 = s S hebrew_dalet S U05BC
keycode  40 = d D hebrew_gimel D
keycode  41 = f F hebrew_kaph F
keycode  42 = g G hebrew_ayin G U05F1
keycode  43 = h H hebrew_yod H U05F2
keycode  44 = j J hebrew_chet J U05B4
keycode  45 = k K hebrew_lamed K
keycode  46 = l L hebrew_finalkaph L rightdoublequotemark
keycode  47 = semicolon colon hebrew_finalpe colon doublelowquotemark
keycode  48 = apostrophe quotedbl comma quotedbl U05F4
keycode  49 = grave asciitilde semicolon asciitilde U05F3
keycode  50 = Shift_L ISO_Next_Group Shift_L ISO_Next_Group
keycode  51 = backslash bar backslash bar U05BB
keycode  52 = z Z hebrew_zain Z
keycode  53 = x X hebrew_samech X U05B6
keycode  54 = c C hebrew_bet C U05B1
keycode  55 = v V hebrew_he V
keycode  56 = b B hebrew_nun B NoSymbol U05C6
keycode  57 = n N hebrew_mem N
keycode  58 = m M hebrew_zade M U05B5
keycode  59 = comma less hebrew_taw greater rightsinglequotemark
keycode  60 = period greater hebrew_finalzade less singlelowquotemark
keycode  61 = slash question period question division
... etc. etc. ...

Языковые переменные среды

$ env | grep LANG
LANG=en_IL
GDM_LANG=en_US.utf8
LANGUAGE=en_IL:en

Другие заметки

  • Если я создаю чистую учетную запись пользователя, этот пользователь не сталкивается с этой проблемой. Так что это должна быть какая-то пользовательская настройка.
  • Если я копирую текст на иврите, я могу вставить его в приложения, в которых не используются ивритские символы, и он отображается нормально.
  • Я сохранил свою домашнюю папку из предыдущей, не Devuan, установки Linux (это был Linux Mint 18.3).

3 ответа3

1

Приведенный ниже ответ не решил проблему автора, но последующее обсуждение, наконец, указало на это.

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

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


Ваша проблема кажется такой же, как в посте
Терминал не принимает некоторые введенные символы юникода.

Обходной путь, найденный в этом посте, должен был изменить .Xmodmap и замените имена сим-ключей их шестнадцатеричными кодами Unicode.

В вышеприведенном посте для греческого персонажа ifonlyif постер заменил строку:

код ключа 58 = m M m M процентов Greek_mu KP_1 KP_1 ifonlyif

по линии:

код ключа 58 = m M m M процентов Greek_mu KP_1 KP_1 U21D4

Не имея вашей среды, я полагаю, что в вашем примере для ключевого кода 38 следует заменить текст hebrew_shin на U05E9 (или что-то подобное).

Если это работает для вас, вам нужно сделать то же самое для всех букв иврита, что, к сожалению, будет довольно болезненным. Если вам повезет, то юникода шестнадцатеричный код может быть уже упоминалось в Xmodmap , так что вы можете сделать это с помощью какой - то sed магии.

1

Вам необходимо удалить / очистить файл ~ / .xinputrc.

Вдохновленный некоторыми догадками, предложенными @harrymc, я нашел виновника: мой файл ~/.xinputrc , созданный в моем предыдущем выпуске (Linux Mint 18.3). Это говорит:

# im-config(8) generated on Wed, 25 Jan 2017 22:44:55 +0100
run_im xim
# im-config signature: 21f3e409b30c3de81e8302273ccb3d5c  -

Механизм im-config

метод ввода в X Window System с графическим интерфейсом GTK или диалоговым окном консоли.

который объясняет, почему только (более простые) приложения GTK, кажется, затронуты. Я совсем не знаком с бизнесом метода ввода, но - если я удалю этот файл или закомментирую опцию run_im - все приложения теперь, кажется, принимают ивритские символы, которые я набираю .

0

Частичный ответ:

Если вы сравните a и ש , вы увидите

XLookupString gives 1 bytes: (61) "a"

против

XLookupString gives 0 bytes: 

И это проблема, потому что, глядя на справочную страницу, XLookupString обрабатывает только Latin-1, поэтому приложения, использующие XLookupString для преобразования нажатий клавиш в символы, получат пустой результат, в результате чего ваши «ивритские символы не будут регистрироваться, пока пунктуация Знаки делают.

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

Я не знаю, как это исправить. Вам нужно будет использовать приложения, которые понимают Unicode/UTF-8, а также правильно переводят полученные ключевые символы. Исправление исходного кода неработающих приложений - вариант, но если бы это было легко, я уверен, что кто-то уже сделал бы это ... так что я бы предположил, что есть некоторые ошибки.

Альтернативы XLookupString которые работают с UTF-8 (Xutf8LookupString), существуют.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .