TTY dengan 256 warna?

25

Dengan URxvt dan xterm dimungkinkan untuk menggunakan terminal virtual yang mendukung 256 warna, bukan hanya delapan. Karena kartu grafis Intel GMA saya didukung dengan baik oleh driver framebuffer KMS, saya secara eksklusif bekerja pada TTY. Sayangnya itu hanya mendukung delapan warna walaupun dengan MPlayer (-vo fbdev / fbdev2) dan alat framebuffer lainnya jauh lebih dapat diatasi. Apakah ada cara untuk memberitahu TTY untuk menggunakan lebih dari delapan warna?

timn
sumber

Jawaban:

10

Saya merevisi jawaban saya sekarang karena saya yakin akan banyak hal.

Adalah keliru untuk menyimpulkan bahwa urutan ANSI sedang ditangani melalui BIOS atau selain dari kernel; memang, mereka ditangani di kernel. Saya menemukan apa yang saya lewatkan sebelumnya berkat hnaz_ pada kanal IRC LinuxNewbies: drivers/char/vt.cmengimplementasikan emulasi terminal Digital Equipment VT102 yang digunakan oleh driver terminal virtual.

Jadi ... sebagai jawaban yang pasti, setelah meninjau kode sumber yang menangani urutan pelarian untuk terminal virtual: Jika Anda menginginkan 256 warna dukungan pada terminal virtual, Anda harus membangun kernel Anda sendiri setelah memperluas kode yang mem-parsing urutan pelarian untuk menangani spesifikasi warna yang lebih luas.

Fungsi ini disebut csi_m (). Perubahan harus serupa dengan yang memperpanjang emulator terminal berbasis-X untuk menangani urutan pelepasan yang menentukan kode warna yang lebih kaya. Mungkin akan ada perubahan lain yang diperlukan juga, tetapi di sinilah Anda akan mulai.

pbr
sumber
1
Betul sekali. Saya berbicara tentang "terminal virtual level rendah" ini. Tetapi karena saya menggunakan framebuffer, saya kira modul fbcon kernel yang digunakan. Lihat Dokumentasi / fb / fbcon.txt. Atau fbcon hanya pembungkus n_tty menambahkan beberapa fitur tambahan? Melihat tambalan URxvt ( cvs.schmorp.de/rxvt-unicode/doc/… ), tampaknya cukup mudah untuk memperluas dukungan 256-warna. Saya tidak yakin apakah n_tty adalah modul kernel yang tepat karena saya tidak melihat definisi warna di sana.
timn
saya pikir framebuffer adalah satu perangkat, dan tty adalah yang lain - terminal virtual membutuhkan perangkat tty, dan mereka yang menggunakan framebuffer sebagai perangkat tampilan, tetapi framebuffer bukan satu-satunya perangkat tampilan yang mungkin.
Quack quixote
+1 ini terdengar lebih mungkin (vt102 tidak mendukung warna yang diperluas, dan driver terminal dikodekan ke emulasi vt102). sedikit riset yang bagus.
quack quixote
1
Situasi yang sama pada tahun 2017. Saya percaya kmsconadalah terminal pengguna yang mencoba untuk meningkatkan terminal (termasuk warna 24-bit). Meskipun perkembangannya telah stagnan mendukung alternatif sistemd.
jiggunjer
kmscon telah bercabang dan pada posting ini sedang dikembangkan secara aktif: github.com/Aetf/kmscon
user3751385
7

256 warna RXVT / xterm / URXVT / etc Anda ditentukan oleh terminfo dan pengaturan TERMvariabel. Di sebagian besar distribusi Linux, terminal virtual Anda didefinisikan /etc/inittab, dan menggunakan tipe terminal default yang menentukan berapa banyak warna yang dapat digunakan terminal.

Apakah ada cara untuk memberitahu TTY untuk menggunakan lebih dari delapan warna?

Iya nih.

  • Pastikan framebuffer Anda menggunakan resolusi / kedalaman bit yang benar. Coba tambahkan vga=773ke opsi kernel, misalnya, untuk mendapatkan 1024x768 dan 256 warna (kedalaman warna 8-bit).

  • Tetapkan JANGKA berbeda (misalnya, export TERM=foo). Anda harus bereksperimen untuk menemukan yang tepat. Jika Anda menemukan satu yang berfungsi, Anda dapat memodifikasi /etc/inittabterminal virtual Anda sehingga menjalankannya secara default (lihat bagian selanjutnya).

  • Artikel ini membahas opsi lain yang mungkin cocok untuk Anda. Ini merekomendasikan Qingy (Qingy bukan GettY) sebagai pengganti getty, dan dapat memberi Anda apa yang Anda cari jika beralih variabel TERM bukan pilihan.

  • Berbicara tentang penggantian getty, saya bersumpah saya telah melihat instruksi untuk mengganti getty dengan GNU screensuatu tempat di sepanjang jalan. Saya tidak menemukan tautan saat ini, tetapi karena ada JANGKA 256 warna untuk screen, Anda mungkin memeriksanya.


/etc/inittab menggunakan baris seperti ini untuk mengatur terminal virtual:

# Format:
#  <id>:<runlevels>:<action>:<process>
#
1:2345:respawn:/sbin/getty 38400 tty1
2:2345:respawn:/sbin/getty 38400 tty2
3:2345:respawn:/sbin/getty 38400 tty3

Ini manualnya /sbin/getty(dari sistem Debian saya, jadi ini agettyprogramnya secara teknis ):

SYNOPSIS
       agetty [-8ihLmnw] [-f issue_file] [-l login_program] [-I init]
       [-t timeout] [-H login_host] baud_rate,...  port [term]

Perhatikan di baud_rate,... port [term]sana di akhir. Itu cocok dengan perintah di /etc/inittabbaris ( /sbin/getty 38400 ttyN) - perhatikan tidak ada [term]argumen, jadi kami mendapatkan default (berjalan echo $TERMtepat setelah Anda masuk pada konsol virtual untuk melihat apa yang digunakan sistem Anda). Dari halaman manual lagi:

ARGUMENTS
       term   The value to be used for the TERM environment variable.  This  over‐
              rides  whatever  init(8) may have set, and is inherited by login and
              the shell.

Jika Anda menemukan TERM yang berfungsi, ubah baris getty di inittab Anda dan tambahkan TERM yang tepat di akhir:

1:2345:respawn:/sbin/getty 38400 tty1 TERM-with-256-colors
2:2345:respawn:/sbin/getty 38400 tty2 TERM-with-256-colors
quack quixote
sumber
1
~ dukuri semua informasi yang luar biasa ini tetapi saya tidak yakin ini akan membawa kesuksesan. Anda mengatakan "Ya" tetapi kemudian katakan "percobaan" dan "jika Anda menemukannya". Saya mengambil rute yang lebih langsung; Saya mencari kode kernel. Saya tidak dapat menemukan kode yang menangani urutan escape untuk warna - DI MANA SAJA di dalam kernel. Tidak dalam kode fb, tidak dalam kode tty ... di mana pun. Demikian kesimpulan saya bahwa itu ditangani di BIOS. Ini didukung oleh ingatan saya tentang menggunakan urutan pelarian ANSI yang sama persis di bawah DOS. Saya percaya berbagai urutan pelarian ANSI sedang ditangani oleh BIOS dalam kedua kasus.
pbr
@ pbr: saya juga memeriksa kode kernel. Kode TTY tidak membatasi jumlah warna. BIOS tidak masuk ke dalamnya - Anda berurusan dengan framebuffer, yang dapat mengambil berbagai bitdepths (spesifikasi tergantung pada perangkat keras, jika Anda telah menonaktifkan framebuffer ...). Keterbatasan 16-warna mungkin di GeTTY, sehingga rekomendasi untuk memeriksa Qingy, atau mungkin dalam hal terminfo, sehingga rekomendasi untuk mencoba berbagai definisi JANGKA alternatif. saya tidak bisa memberi saran lebih dari itu, tetapi ranting BIOS Anda tidak berdasar dan tidak membantu .
quack quixote
1
~ dukun - Anda benar bahwa itu tidak ada di BIOS (lihat jawaban saya yang direvisi di bawah) tetapi masih tidak aktif dalam merekomendasikan penyelidikan Qingy et al. Kode terminal virtual dikodekan dengan emulasi vt102.
pbr
6

Lihatlah fbterm - ini adalah framebuffer pengganti yang dapat berjalan dalam mode 256-warna (Anda hanya menjalankannya sebagai root dari TTY)

Saya sangat sukses dengan itu - beberapa aplikasi berfungsi dengan baik, dan melaporkan 256 warna; namun Emacs (alasan utama saya ingin 256 warna pada TTY) sepertinya tidak berfungsi; ada sedikit diskusi tentang hal ini di sini, tetapi tidak benar-benar terselesaikan:

http://lists.gnu.org/archive/html/emacs-devel/2011-08/msg00989.html

Namun, mplayer harus bekerja!

Seb
sumber
Tampak mengerikan dibandingkan dengan klien terminal X.
phil pirozhkov
1
Ini berjalan di framebuffer sehingga Anda hanya memiliki 256 warna yang tersedia untuk framebuffer.
Seb
Ingin tahu apakah Anda memiliki wawasan tentang masalah fbterm ini? superuser.com/questions/892028/…
dtmland
Berlari ke emacsdalam tmuxdapat membantu karena harus menerjemahkan urutan pelarian untuk terminal di sekitarnya.
Tom Hale
1

kmscon

kmscon adalah cara untuk memberi Anda 256 warna dan video tanpa memasang sistem windows (X, Wayland).

Itu ditinggalkan tetapi saat ini dikelola melalui garpu .

Dokumentasi tentang instalasi ramping, tetapi halaman README di sini seharusnya membantu Anda.


Saya telah menginstal ini dan menggunakannya untuk aplikasi konsol yang membutuhkan 256 warna (karena konfigurasi saya).

Baca instruksi instalasi dengan hati-hati.

pengguna3751385
sumber
-1

Urutan melarikan diri ANSI untuk mengatur warna latar depan dan latar belakang teks adalah apa yang membatasi hal-hal di sini.

Dari memori urutan ini terlihat seperti melarikan diri [01; 34m Ada kode di 30 untuk latar depan dan saya pikir 40 di latar belakang.

Jadi saya tidak berpikir ada cara untuk mencapai apa yang Anda cari.

pbr
sumber
2
Sebenarnya itu mungkin. Kalau tidak, saya tidak akan dapat menggunakan mutt dengan 256 warna di URxvt. :) Lihat juga push.cx/2008/256-color-xterms-in-ubuntu Tapi bagaimana cara mendapatkan efek yang sama di TTY?
timn