Bagaimana cara mendefinisikan Compose Key di terminal (tidak ada lingkungan desktop)?

17

Saya ingin mendefinisikan composekunci pada sistem saya (Debian Sid "Wheezy"). Saya tidak punya Xorg (dan tidak ingin ada lingkungan desktop). Hanya di terminal.

Saya ingin memasangnya di Alt-Grkunci saya (kanan Alt). Saya sudah mencoba beberapa saat tetapi saya tidak tahu cara mengaturnya.

Saya telah menyelidiki dan menemukan beberapa petunjuk:

  • $ showkeymemberi saya kode kunci dari Alt-Grkunci saya (# 100)

  • $ dumpkeysdan $ dumpkeys --compose-onlyoutput "isi saat ini dari driver keyboard", dalam format yang ditentukan oleh keymaps, menurut manhalaman

  • $ loadkeys memuat tabel terjemahan keyboard

Saya yakin itu tidak sulit tetapi saya rindu bagaimana menghadapinya ...

cedbeu
sumber
Hm, saya tidak mengikuti 100%, apa yang Anda ingin lakukan Alt-Gr ketika Anda menekannya?
Emanuel Berg
Saya ingin itu menjadi Kunci Menulis . Sebenarnya, saya hanya ingin mendefinisikan Compose Key di suatu tempat, dan karena saya sudah terbiasa menggunakannya di Alt-Gr, saya ingin mendefinisikannya di sana. Ini sangat mudah untuk diatur dengan GUI , tetapi saya harus dapat mendefinisikannya dalam mode konsol murni karena saya tidak memiliki sistem X yang diinstal (itu bukan pilihan). Aku hanya tidak tahu caranya.
cedbeu

Jawaban:

10

Pada sistem Debian dan Ubuntu yang lebih baru, pengaturan keyboard Anda dimasukkan /etc/default/keyboarddan dibagikan antara X dan konsol. Lari saja

sudo dpkg-reconfigure keyboard-configuration

dan pilih Compose key: Right Alt (AltGr)pada layar yang sesuai.

Anda juga bisa menempatkan XKBOPTIONS=compose:raltdi /etc/default/keyboarddan menjalankan

sudo dpkg-reconfigure console-setup

Sistem yang lebih lama memiliki kunci penulisan pada konsol secara default. Dalam ustata letak, menekan kedua Alt tombol bersamaan berfungsi seperti Compose. 1

Sebagai contoh: Alt+ AltGr, ", A=> Ä

Jika Anda lebih suka AltGrhanya untuk menjadi Compose, Anda perlu perubahan

alt keycode 100 = Compose

di peta keyboard aktif Anda untuk

keycode 100 = Compose

Cara termudah untuk melakukan ini adalah dengan membuat perubahan di atas /lib/kbd/keymaps/i386/include/linux-with-alt-and-altgr.inc.

Cara yang lebih baik adalah membuat file baru yang disebut /lib/kbd/keymaps/i386/include/altgr-is-compose.incdengan baris di atas, membuat keymap baru yang menyertakannya, dan mengaturnya ke keymap default Anda.

  1. PrtScnjuga bertindak sebagai Composedefault.
Mikel
sumber
Saya tidak mendapatkan ini untuk bekerja. The dpkg-reconfigureWizard memang menanyakan tentang kunci compose, namun mengatakan ia tidak bekerja dalam "modus Unicode" (?). Juga, ketika tidak dalam mode itu, dikatakan periode Control + berfungsi sebagai kunci penulisan. Tapi aku juga tidak bisa membuatnya bekerja.
Emanuel Berg
Saya pikir pesan peringatan mengacu unicode_start. Bagi saya, itu masih berfungsi, asalkan saya menjalankan setupconseperti yang dpkg-reconfiguredikatakan.
Mikel
Ketika saya menjalankan setupconterminal X saya ( urxvt), dikatakan "Kami tidak di konsol, konsol dibiarkan tidak dikonfigurasi." Juga, showkeymengeluh "Tidak bisa mendapatkan deskriptor file ke konsol". Dalam tty, kedua karya itu tetapi showkeymengatakan (hal pertama) bahwa "mode kb adalah UNICODE", jadi mungkin itulah mengapa tidak bekerja. Tetapi, periode Kontrol + berfungsi di tty. OKE, masuk akal sekarang.
Emanuel Berg
Pertanyaan Anda mengatakan Anda tidak punya X? Anda perlu menjalankan setupconkonsol virtual Linux, mis. Ctrl + Alt + F1.
Mikel
1
Sepertinya console-setuptidak mendukung urutan penulisan yang sangat banyak secara default. Anda dapat berlari dumpkeys --compose-onlyuntuk melihat yang mana. Anda harus dapat memodifikasi console-setupskrip init untuk menambahkan aturan penulisan tambahan tempat skrip dijalankan loadkeys.
Mikel
2

"compose" pada konsol memungkinkan untuk mengetik dua karakter tetapi menghasilkan yang ketiga.

masalahnya adalah bahwa definisi penulisan menggunakan byte , baik sebagai dua input (yaitu, Anda tidak dapat mendefinisikan menulis dalam hal kunci yang diketik tetapi hanya dalam hal simbol yang diketik) dan untuk output.

untuk membuatnya bekerja di UTF-8, yang multibyte (setidaknya 1 byte, setidaknya) akan membutuhkan perubahan besar dalam cara input konsol ditangani, dan mengganti array char sederhana yang saat ini digunakan oleh sesuatu yang lebih kompleks. Sepertinya tidak ada rencana untuk melakukannya (konsensus di antara kernel devlopers adalah bahwa konsol harus tetap menjadi konsol, sesuatu yang sederhana, hanya digunakan untuk ressort terakhir; jika Anda benar-benar membutuhkan unicode maka Anda kemungkinan juga perlu bidi, membentuk, dll; kemudian lebih baik menjalankan terminal grafis (xterm layar penuh pada X11; tetapi ada kemungkinan lain).

Jadi, memang tidak berfungsi, dan tidak akan berfungsi, dengan karakter multibyte di konsol. TETAPI masih berfungsi jika Anda membatasi definisi penulisan menjadi ASCII biasa.

Dan saya juga menemukan bahwa itu juga berfungsi jika output di iso-8859-1 (yang sesuai dengan nilai unicode hingga 0x00ff); untuk itu Anda dapat memasukkan beberapa skrip mulai baris:

    loadkeys / somepath / somefile

dan letakkan di file itu definisi penulisan yang Anda inginkan (berhati-hatilah untuk menyimpan file dalam penyandian ISO-8859-1; dan gunakan karakter yang lebih besar dari 0x7f sebagai keluaran saja) sintaksis file semacam itu sangat sederhana, baris-baris seperti ini:

    buat 'somechar' 'somotherchar' menjadi 'diinginkanoutput'

misalnya:

    menulis 'a' 'a' ke 'å'
    buat 'a' 'e' menjadi 'æ'

apostrof harus diloloskan.

efek kunci diakritik yang mati juga ditentukan dalam file itu; untuk dead_acute + a Anda mendefinisikan garis seperti:

    tulis '\' '' a 'ke' á '

dead_grave menggunakan backtick (`), dead_diaeresis menggunakan doublequote ("), dead_circumflex menggunakan circumflex (^) dan dead_tilde menggunakan tilde (~).

Pablo Saratxaga
sumber
Terima kasih, mulai bekerja. Hanya saja, saya harus berubah compose 'a' 'a' to 'å'menjadi compose 'o' 'a' to U+00E5, jika tidak loadkeysmengeluh tentang kesalahan sintaksis.
Emanuel Berg
ketika Anda menggunakan 'å', apakah Anda menulis file di iso-8859-1 (bukan utf-8)?
Pablo Saratxaga
Saya tidak tahu Bagaimana saya memeriksanya?
Emanuel Berg
untuk menguji apakah suatu file berada di utf-8: iconv -f utf-8 -t utf-8 filename jika tidak ada kesalahan, itu ada di utf-8
Pablo Saratxaga
Itu tampaknya cat file, tetapi tidak, tidak ada kesalahan echo $?setidaknya, dan tidak ada output stderr. Juga, fileberi tahu saya itu adalah UTF-8 jadi masuk akal.
Emanuel Berg