TTY กับ 256 สี?


25

ด้วย URxvt และ xterm คุณสามารถใช้เทอร์มินัลเสมือนที่รองรับ 256 สีแทนแปดสีเท่านั้น เนื่องจากการ์ดกราฟิก Intel GMA ของฉันได้รับการสนับสนุนอย่างดีจากไดร์เวอร์เฟรมอัป KMS ฉันจึงทำงานกับ TTY โดยเฉพาะ น่าเสียดายที่มันรองรับเฉพาะแปดสีถึงแม้ว่าจะมี MPlayer (-vo fbdev / fbdev2) และเครื่องมือ framebuffer อื่น ๆ อีกมากมายสามารถแก้ไขได้ มีวิธีบอก TTY ให้ใช้มากกว่าแปดสีหรือไม่?

คำตอบ:


10

ฉันกำลังแก้ไขคำตอบของฉันในขณะนี้ว่าฉันแน่ใจในสิ่งต่าง ๆ

มันผิดพลาดที่จะสรุปว่าลำดับ ANSI นั้นได้รับการจัดการผ่าน BIOS หรือนอกเคอร์เนล แน่นอนพวกเขากำลังจัดการในเคอร์เนล ฉันพบสิ่งที่ฉันพลาดไปก่อนหน้านี้ขอบคุณ hnaz_ บนช่องทาง LinuxNewbies IRC: drivers/char/vt.cทำการจำลองเทอร์มินัลอุปกรณ์ Digital VT102 ซึ่งใช้งานโดยไดรเวอร์เทอร์มินัลเสมือน

ดังนั้น ... เป็นคำตอบที่ชัดเจนเมื่อตรวจสอบซอร์สโค้ดที่จัดการลำดับ escape สำหรับเทอร์มินัลเสมือน: หากคุณต้องการการสนับสนุน 256 สีในเทอร์มินัลเสมือนคุณจะต้องสร้างเคอร์เนลของคุณเองหลังจากขยายโค้ดที่แยกวิเคราะห์ เพื่อจัดการกับข้อกำหนดสีที่กว้างขึ้น

ฟังก์ชั่นนี้เรียกว่า csi_m () การเปลี่ยนแปลงจะต้องคล้ายกับที่ขยายเทอร์มินัลอีมูเลเตอร์ X เพื่อจัดการลำดับเอสเคปโดยระบุรหัสสีที่สมบูรณ์ยิ่งขึ้น อาจมีการเปลี่ยนแปลงอื่น ๆ ที่จำเป็นเช่นกัน แต่นี่คือที่ที่คุณจะเริ่มต้น


1
ถูกตัอง. ฉันกำลังพูดถึง "เทอร์มินัลเสมือนระดับต่ำ" เหล่านี้ แต่เนื่องจากฉันใช้ framebuffer มันเป็นโมดูลเคอร์เนล fbcon ที่ใช้ฉันคิดว่า ดูเอกสารประกอบ / fb / fbcon.txt หรือ fbcon เป็นเพียงเสื้อคลุมรอบ ๆ n_tty เพิ่มคุณสมบัติเพิ่มเติมบางอย่าง? เมื่อดูที่แพทช์ URxvt ( cvs.schmorp.de/rxvt-unicode/doc/ ...... ) ดูเหมือนว่าค่อนข้างง่ายที่จะขยายการสนับสนุน 256 สี ฉันไม่แน่ใจว่า n_tty เป็นโมดูลเคอร์เนลที่ถูกต้องหรือไม่เพราะฉันไม่เห็นคำจำกัดความสีใด ๆ
ทิม

ฉันคิดว่า framebuffer เป็นอุปกรณ์หนึ่งและ tty นั้นเป็นอีกเครื่องหนึ่ง - เทอร์มินัลเสมือนต้องการอุปกรณ์ tty และที่ใช้ framebuffer เป็นอุปกรณ์แสดงผล แต่ framebuffer ไม่ใช่อุปกรณ์แสดงผลที่เป็นไปได้เท่านั้น
ต้มตุ๋น Quixote

+1 นี่ฟังดูมีโอกาสมากขึ้น (vt102 ไม่รองรับการขยายสีและไดรเวอร์เทอร์มินัลกำหนดค่าตายตัวเพื่อจำลอง vt102) การวิจัยค่อนข้างดี
ต้มตุ๋น Quixote

1
สถานการณ์เดียวกันในปี 2560 ฉันเชื่อว่าkmsconเป็นเทอร์มินัลผู้ใช้ที่พยายามปรับปรุงเทอร์มินัล (รวมถึงสี 24 บิต) แม้ว่าการพัฒนาจะซบเซาในทางเลือกของ systemd
jiggunjer

kmscon ถูกแยกส่วนและในขณะนี้โพสต์นี้กำลังได้รับการพัฒนาอย่างแข็งขัน: github.com/Aetf/kmscon
user3751385

7

RXVT / xterm / URXVT / etc 256 สีของคุณถูกกำหนดโดย terminfo และการตั้งค่าของTERMตัวแปร ในการกระจาย Linux ส่วนใหญ่เทอร์มินัลเสมือนของคุณจะถูกกำหนด/etc/inittabและใช้ชนิดเทอร์มินัลเริ่มต้นที่กำหนดจำนวนเทอร์มินัลที่สามารถใช้ได้

มีวิธีบอก TTY ให้ใช้มากกว่าแปดสีหรือไม่?

ใช่.

  • ตรวจสอบให้แน่ใจว่า framebuffer ของคุณใช้ความละเอียด / บิตที่ถูกต้อง ลองเพิ่มvga=773ตัวเลือกเคอร์เนลเช่นรับ 1024x768 และ 256 สี (ความลึกของสี 8 บิต)

  • ตั้ง TERM อื่น (เช่น, export TERM=foo) คุณจะต้องทดสอบเพื่อหาสิ่งที่ถูกต้อง หากคุณพบอุปกรณ์ที่ใช้งานได้คุณสามารถปรับเปลี่ยน/etc/inittabเพื่อให้เทอร์มินัลเสมือนของคุณทำงานตามค่าเริ่มต้น (ดูหัวข้อถัดไป)

  • บทความนี้กล่าวถึงตัวเลือกอื่น ๆ ที่อาจเหมาะกับคุณ แนะนำให้Qingy (Qingy ไม่ใช่ GettY)แทน getty และอาจให้สิ่งที่คุณต้องการหากการเปลี่ยนตัวแปร TERM ไม่ใช่ตัวเลือก

  • เมื่อพูดถึงการแทนที่เก็ตตี้ฉันสาบานว่าเคยเห็นคำแนะนำในการแทนที่เก็ตตี้ด้วยGNU screenที่ไหนสักแห่งระหว่างทาง ฉันไม่พบลิงค์ในขณะนี้ แต่เนื่องจากมีข้อกำหนดแบบ 256 สีscreenคุณอาจมองเข้าไป


/etc/inittab ใช้บรรทัดเช่นนี้เพื่อตั้งค่าเทอร์มินัลเสมือน:

# 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

นี่คือ manpage ของ/sbin/getty(จากระบบ Debian ของฉันดังนั้นจึงเป็นagettyโปรแกรมทางเทคนิค):

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

สังเกตที่baud_rate,... port [term]นั่นในตอนท้าย ที่ตรงกับคำสั่งใน/etc/inittabบรรทัด ( /sbin/getty 38400 ttyN) - โปรดทราบว่าไม่มี[term]ข้อโต้แย้งดังนั้นเราจึงได้รับค่าเริ่มต้น (เรียกใช้echo $TERMหลังจากคุณเข้าสู่ระบบบนคอนโซลเสมือนเพื่อดูว่าระบบของคุณใช้อะไร) จาก manpage อีกครั้ง:

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.

หากคุณพบ TERM ที่ใช้งานได้ให้ปรับเปลี่ยนบรรทัด getty ใน inittab ของคุณและเพิ่ม TERM ที่เหมาะสมในตอนท้าย:

1:2345:respawn:/sbin/getty 38400 tty1 TERM-with-256-colors
2:2345:respawn:/sbin/getty 38400 tty2 TERM-with-256-colors

1
~ ต้มตุ๋นข้อมูลที่ยอดเยี่ยมทั้งหมดนี้ แต่ฉันไม่แน่ใจว่ามันจะนำไปสู่ความสำเร็จ คุณพูดว่า "ใช่" แต่แล้วพูดว่า "ทดสอบ" และ "ถ้าคุณเจอ" ฉันใช้เส้นทางตรงมากขึ้น ฉันค้นหารหัสเคอร์เนล ฉันไม่สามารถค้นหารหัสใด ๆ ที่จัดการลำดับการหลบหลีกสำหรับสี - ไม่ว่าในเคอร์เนล ไม่ได้อยู่ในรหัส fb ไม่ใช่ในรหัส tty ... ไม่มีเลย ดังนั้นข้อสรุปของฉันว่ามันถูกจัดการใน BIOS สิ่งนี้ได้รับการสนับสนุนจากความทรงจำของฉันในการใช้ลำดับการหลบหนี ANSI ที่แน่นอนเดียวกันภายใต้ DOS ฉันเชื่อว่า BIOS ของทั้งสองกรณีได้รับการจัดการตามลำดับการหลีกเลี่ยง ANSI ต่างๆ
pbr

@pbr: ฉันตรวจสอบรหัสเคอร์เนลด้วย รหัส TTY ไม่จำกัดจำนวนสี ไบออสไม่ได้ใส่เข้าไป - คุณกำลังจัดการกับ framebuffer ซึ่งสามารถใช้ bitdepth ต่าง ๆ ได้ (เฉพาะขึ้นอยู่กับฮาร์ดแวร์และถ้าคุณปิดใช้งาน framebuffer ... ) ข้อ จำกัด 16 สีอาจอยู่ใน GeTTY ดังนั้นคำแนะนำในการตรวจสอบ Qingy หรืออาจอยู่ในข้อมูล terminfo ดังนั้นคำแนะนำให้ลองใช้คำจำกัดความทางเลือกอื่น ๆ ฉันไม่สามารถให้คำแนะนำที่เหนือกว่า แต่คุยโว BIOS ของคุณอยู่นอกฐานและไม่เป็นประโยชน์
ต้มตุ๋น Quixote

1
~ ต้มตุ๋น - คุณถูกต้องว่ามันไม่ได้อยู่ใน BIOS (ดูคำตอบที่แก้ไขของฉันด้านล่าง) แต่ยังคงแนะนำให้ตรวจสอบ Qingy และคณะ รหัสเทอร์มินัลเสมือนมีการกำหนดรหัสอย่างเข้มงวดด้วยการจำลอง vt102
pbr

6

ดูที่ fbterm - มันเป็น framebuffer ทดแทนที่สามารถทำงานในโหมด 256 สี (คุณเพียงแค่เรียกใช้มันเป็นรากจาก TTY)

ฉันประสบความสำเร็จในการผสมผสาน - บางแอพพลิเคชั่นทำงานได้ดีและรายงาน 256 สี; อย่างไรก็ตาม Emacs (เหตุผลหลักที่ฉันต้องการ 256 สีใน TTY) ดูเหมือนจะไม่ทำงาน มีการอภิปรายเล็กน้อยเกี่ยวกับที่นี่ แต่ไม่ได้รับการแก้ไขจริง:

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

อย่างไรก็ตาม mplayer ควรใช้งานได้!


ดูน่ากลัวเมื่อเปรียบเทียบกับไคลเอ็นต์เทอร์มินัล X ใด ๆ
phil pirozhkov

1
มันทำงานใน framebuffer เพื่อให้คุณมี 256 สีให้ framebuffer อยู่แล้ว
Seb

สงสัยว่าคุณมีความเข้าใจในปัญหา fbterm นี้หรือไม่? superuser.com/questions/892028/…
dtmland

การทำงานemacsภายในtmuxอาจช่วยได้เนื่องจากควรแปลลำดับการหลีกเลี่ยงสำหรับเทอร์มินัลโดยรอบ
Tom Hale

1

kmscon

kmsconเป็นวิธีที่จะทำให้คุณได้รับ 256 สีและวิดีโอโดยไม่ต้องติดตั้งระบบ windows (X, Wayland)

มันถูกทอดทิ้ง แต่จะยังคงอยู่ในขณะนี้ผ่านทางแยก

เอกสารเกี่ยวกับการติดตั้งนั้นบาง แต่หน้า README ที่นี่น่าจะช่วยคุณได้


ฉันติดตั้งแล้วและใช้สำหรับแอพคอนโซลที่ต้องการ 256 สี (เป็นกลุ่มเนื่องจากการกำหนดค่าของฉัน)

อ่านคำแนะนำการติดตั้งอย่างระมัดระวัง


-1

ลำดับการหลีกเลี่ยงของ ANSI สำหรับการตั้งค่าสีพื้นหน้าและพื้นหลังของข้อความเป็นสิ่งที่ จำกัด สิ่งที่นี่

จากหน่วยความจำลำดับเหล่านี้มีลักษณะคล้ายกับการหลบหนี [01; 34m มีรหัสในยุค 30 สำหรับเบื้องหน้าและฉันคิดว่า 40 สำหรับพื้นหลัง

ดังนั้นฉันไม่คิดว่าจะมีวิธีใดที่จะบรรลุสิ่งที่คุณต้องการ


2
จริงๆแล้วมันเป็นไปได้ มิฉะนั้นฉันจะไม่สามารถใช้ mutt ที่มี 256 สีใน URxvt :) ดูเพิ่มเติมpush.cx/2008/256-color-xterms-in-ubuntuแต่ฉันจะได้ผลเช่นเดียวกันใน TTY ได้อย่างไร?
Timn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.