Jak zdefiniować klucz tworzenia w terminalu (bez środowiska pulpitu)?

18

Chciałbym zdefiniować composeklucz w moim systemie (Debian Sid „Wheezy”). Nie mam Xorga (i nie chcę żadnego środowiska graficznego). Tylko w terminalu.

Chciałbym ustawić to na moim Alt-Grkluczu (po prawej Alt). Próbowałem przez jakiś czas, ale nie mogę wymyślić, jak to skonfigurować.

Badałem i znalazłem kilka wskazówek:

  • $ showkeydaje mi kod mojego Alt-Grklucza (# 100)

  • $ dumpkeysi $ dumpkeys --compose-onlywypisuje „aktualną zawartość sterownika klawiatury”, w formacie określonym przez keymaps, zgodnie ze manstroną

  • $ loadkeys załaduj tabelę tłumaczeń klawiatury

Jestem pewien, że nie jest to takie trudne, ale brakuje mi tego, jak sobie z tym poradzić ...

Cededu
źródło
Hm, nie śledzę w 100%, co chciałbyś, aby Alt-Gr zrobił po uderzeniu?
Emanuel Berg
Chciałbym, aby był to klawisz komponowania . Właściwie chciałbym po prostu zdefiniować gdzieś klucz kompozytowy, a ponieważ mam go w Alt-Gr, chciałbym go tam zdefiniować. Bardzo łatwo jest skonfigurować GUI , ale powinienem być w stanie zdefiniować go w trybie czystej konsoli, ponieważ nie mam zainstalowanego systemu X (nie jest to opcja). Po prostu nie wiem, jak to zrobić.
cedbeu

Odpowiedzi:

11

W nowszych systemach Debian i Ubuntu ustawienia klawiatury są wprowadzane /etc/default/keyboardi współużytkowane przez X i konsolę. Po prostu biegnij

sudo dpkg-reconfigure keyboard-configuration

i wybierz Compose key: Right Alt (AltGr)na odpowiednim ekranie.

Można również umieścić XKBOPTIONS=compose:raltw /etc/default/keyboardi metę

sudo dpkg-reconfigure console-setup

Starsze systemy mają domyślnie klawisz Compose na konsoli. W usukładzie naciśnięcie obu Alt klawiszy razem działa jak Compose. 1

Na przykład: Alt+ AltGr, ", A=> a

Jeśli wolisz AltGrbyć Compose, musisz się zmienić

alt keycode 100 = Compose

w aktywnej mapie klawiatury do

keycode 100 = Compose

Najłatwiej to zrobić, wprowadzając powyższe zmiany w /lib/kbd/keymaps/i386/include/linux-with-alt-and-altgr.inc.

Lepszym sposobem jest utworzenie nowego pliku o nazwie /lib/kbd/keymaps/i386/include/altgr-is-compose.incz powyższą linią, utworzenie nowej mapy klawiszy, która go zawiera, i ustawienie domyślnej mapy klawiszy.

  1. PrtScndziała również Composedomyślnie.
Mikel
źródło
Nie zmuszam tego do pracy. dpkg-reconfigureKreator rzeczywiście prosi o klucz komponować, ale mówi, że to nie działa w trybie „Unicode” (?). Poza tym, gdy nie jest w tym trybie, napisano, że Control + kropka działa jak klawisz tworzenia. Ale też nie działam.
Emanuel Berg
Myślę, że ten komunikat ostrzegawczy odnosi się do unicode_start. Dla mnie to nadal działa, pod warunkiem, że będę działać setupconjak dpkg-reconfiguremówi.
Mikel
Kiedy uruchamiam setupconna swoim X terminalu ( urxvt), mówi: „Nie jesteśmy na konsoli, konsola pozostaje nieskonfigurowana”. Narzeka także: showkey„Nie można pobrać deskryptora pliku do konsoli”. W ttyobu przypadkach działa, ale showkeymówi (pierwsza rzecz), że „tryb kb był UNICODE”, więc być może właśnie dlatego nie działa. Ale okres Control + działa tty. OK, teraz ma to sens.
Emanuel Berg
Twoje pytanie mówi, że nie masz X? Musisz uruchomić setupconna wirtualnej konsoli Linux, np. Ctrl + Alt + F1.
Mikel
1
Wygląda na to, console-setupże domyślnie nie obsługuje bardzo wielu sekwencji tworzenia. Możesz uruchomić, dumpkeys --compose-onlyaby zobaczyć, które z nich. Powinieneś być w stanie zmodyfikować console-setupskrypt inicjujący, aby dodać dodatkowe reguły tworzenia tekstu w miejscu jego uruchomienia loadkeys.
Mikel
2

„komponuj” na konsoli pozwala wpisać dwa znaki, ale wypisać trzeci.

Problem polega na tym, że definicje tworzenia używają bajtów , zarówno jako dwóch danych wejściowych (to znaczy, nie można zdefiniować komponowania pod względem wpisywanych klawiszy, ale tylko pod względem wpisywanych symboli) i jako wynik.

aby działało w UTF-8, który jest wielobajtowy (przynajmniej 1 do 4 bajtów), wymagałoby wielkich zmian w sposobie obsługi danych wejściowych konsoli i zastąpiłby prostą tablicę char obecnie używaną przez coś bardziej złożonego. Wygląda na to, że nie ma takich planów (konsensus między deweloperami jądra jest taki, że konsola powinna pozostać konsolą, czymś prostym, używanym tylko do ostatniego ressortowania; jeśli rzeczywiście potrzebujesz Unicode, to prawdopodobnie potrzebujesz także bidi, kształtowania itp .; następnie lepiej jest uruchomić terminal graficzny (pełnoekranowy xterm na X11; ale są też inne możliwości).

Tak więc rzeczywiście nie działa i nie będzie działać ze znakami wielobajtowymi na konsoli. ALE to nadal działa, jeśli ograniczysz definicje tworzenia do zwykłego ASCII.

Dowiedziałem się również, że działa również, jeśli dane wyjściowe są w iso-8859-1 (które odpowiadają wartościom Unicode do 0x00ff); w tym celu możesz wstawić wiersz skryptu startowego:

    loadkeys / somepath / somefile

i wstaw do tego pliku odpowiednie definicje tworzenia (pamiętaj o zapisaniu pliku w kodowaniu ISO-8859-1 i użyj znaków większych niż 0x7f jako samych danych wyjściowych) składnia takiego pliku jest bardzo prosta, takie wiersze:

    skomponuj „somechar” „somotherchar” do „pożądanego wyjścia”

na przykład:

    skomponuj „a” „a” do „å”
    skomponuj „a” „e” do „æ”

apostrof musi zostać ocalony.

efekt martwych kluczy diakrytycznych jest również zdefiniowany w tym pliku; dla dead_acute + a definiujesz linię taką jak:

    skomponuj „\” „a” do „á”

dead_grave używa backtick (`), dead_diaeresis używa doublequote ("), dead_circumflex używa circumflex (^), a dead_tilde używa tyldy (~).

Pablo Saratxaga
źródło
Dzięki, udało mi się. Tylko miałem do zmian compose 'a' 'a' to 'å'w compose 'o' 'a' to U+00E5przeciwnym razie loadkeysnarzekali błąd składni.
Emanuel Berg
kiedy używałeś 'å', czy zapisałeś plik w iso-8859-1 (nie utf-8)?
Pablo Saratxaga
Nie wiem Jak to sprawdzić?
Emanuel Berg,
sprawdzić, czy plik znajduje się w utf-8: iconv -f utf-8 -t utf-8 filename jeśli nie ma błędów, to jest w utf-8
Pablo Saratxaga
Wydaje się, że to plik cat, ale nie, echo $?przynajmniej nie ma błędów i nie ma wyjścia stderr. fileMówi mi też, że to UTF-8, więc ma to sens.
Emanuel Berg