Tampilkan tombol yang ditekan di konsol khusus


2

Saya memiliki klien khusus yang terhubung ke Ubuntu jauh melalui websocket dan menjalankan bash di sana. Tetapi kunci seperti Del, Panah dll. Tidak berfungsi. Bagaimana saya bisa menampilkan apa yang diterima di sisi server? Tidak ada solusi yang disebutkan dalam tombol show yang ditekan dalam pekerjaan linux .

UPDATE : Saya pertama kali bertanya tentang SSH, tetapi kemudian menyadari bahwa saya mungkin tidak menggunakan SSH.

UPDATE2 : Apa yang sudah saya coba.

# showkey
Couldn't get a file descriptor referring to the console

# evtest
No device specified, trying to scan all of /dev/input/event*
USAGE:
 Capture mode:
   evtest [--grab] /dev/input/eventX
     --grab  grab the device for exclusive access

 Query mode: (check exit code)
   evtest --query /dev/input/eventX <type> <value>

<type> is one of: EV_KEY, EV_SW, EV_LED, EV_SND
<value> can either be a numerical value, or the textual name of the
key/switch/LED/sound being queried (e.g. SW_DOCK).


# ls /dev/input
ls: cannot access /dev/input: No such file or directory


# stty -a
speed 38400 baud; rows 300; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

Pada dasarnya, saya butuh sesuatu seperti ini:

demo keyboard termbox

UPDATE3 : Komunikasi antara klien konsol dan server dilakukan melalui websockets di Go. Sumber - klien dan server .


Anda telah memberikan setengah pertanyaan: kami tidak tahu apa yang Anda coba dan apa hasilnya. Jika Anda terhubung sebagai terminal (pseudo), bagian ctrl + V akan memberi tahu Anda sesuatu, seperti halnya "stty -a".
Thomas Dickey

Bagaimana Anda terhubung ke server? Apakah Anda terhubung ke port 23? Itu berarti Anda menggunakan telnet. Jika Anda tidak tahu apakah Anda menggunakan SSH atau telnet maka saya pikir Anda mungkin telah menggigit lebih dari yang Anda bisa kunyah! Apa yang pada dasarnya Anda lakukan dengan menghubungkan seperti ini adalah menulis emulator terminal. Anda perlu mendukung segala sesuatu yang perlu didukung oleh emulator terminal. Misalnya, dari mesin Windows Anda mungkin menggunakan Putty untuk terhubung ke mesin Unix jarak jauh. Putty adalah emulator terminal, jadi Anda harus melakukan semua yang Putty lakukan. Jadi, Anda perlu menerapkan protokol TELNET.
Sam

@ThomasDickey, pertanyaan yang diedit.
techolik anatoly

@ Sam, kodenya ada di sini github.com/lxc/lxd/blob/… - ia menggunakan soket web.
techolik anatoly

Jawaban:


2

Hasil menunjukkan stty -aitu menjanjikan, tetapi tidak pertanyaan maupun jawaban lain menunjuk cara yang biasa untuk menemukan apa yang dikirim dengan kunci khusus seperti Del, Left-cursor, dll

Tidak jelas OP "Del" mana yang dimaksud. Saya memiliki keduanya Deletedan Deltombol pada keyboard saya (pada keypad pengeditan dan numerik). Keduanya dapat mengirim serangkaian byte data yang dimulai dengan ESC(karakter pelarian ASCII). Yaitu, di terminal reguler.

Namun, pertanyaannya disebut websocket , yang terdengar seolah-olah ini berjalan di browser web. Tangkapan layar menunjukkan beberapa jenis keyboard layar, dengan DELtombol pengeditan.

Jika implementasi selesai, orang akan mengharapkan sesuatu seperti ini dikirim ke shell ketika menekan tombol itu, jika Anda pertama kali menekan controlV:

^[[3~

Ini ^[adalah ASCII escape character ( control[). Anda memerlukan karakter controlV lnext untuk mencegah shell menafsirkannya atau membuangnya.

Pengaturan lnext(literal berikutnya) adalah fitur termios apa pun yang mungkin Anda temui, tetapi anehnya tidak disebutkan dalam standar POSIX kecuali sebagai disediakan untuk ekstensi (lihat penyebutan VLNEXT). Namun, karena ini ditandai untuk linux, dokumentasi Linux adalah apa yang dapat Anda gunakan untuk referensi:

  • termios (3)

    Fungsi termios menggambarkan antarmuka terminal umum yang disediakan untuk mengontrol port komunikasi asinkron.

  • stty (1)

    Cetak atau ubah karakteristik terminal.

Anda dapat melihatnya di output stty -a, yaitu, di baris output keempat dalam contoh ini:

$ stty -a
speed 38400 baud; rows 40; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

Apa mekanisme Kontrol + V ini? Apakah ini didukung oleh semua Linux?
anatoly techtonik

ya - ini adalah fitur dari semua sistem mirip Unix.
Thomas Dickey

Saya tidak melihat apa-apa ketika saya menekan F1, Panah dll. Setelah Ctrl-V, sehingga 100% berarti klien saya tidak mengirimkannya, kan?
techolik anatoly

Kedengarannya benar - implementasi keyboard mungkin tidak lengkap.
Thomas Dickey

1

Saya pikir Anda perlu mengambil langkah mundur dan berpikir tentang apa yang Anda coba lakukan. Anda tidak jelas tentang bagaimana Anda terhubung ke server melalui WebSockets. Saya berasumsi Anda terhubung ke server WebSocket yang memproxy koneksi ke port telnet, apakah itu benar (karena WebSockets hanya dapat terhubung ke WebSockets)? Anda mungkin ingin melihat proyek Websockify yang memiliki contoh klien telnet yang kompatibel dengan VT100. Anda bisa mendasarkan proyek Anda dari itu.


Ini adalah kode klien. github.com/lxc/lxd/blob/… Saya perlu melihat lebih dalam untuk bagian server.
anatoly techtonik
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.