ปิดใช้งานสีบนเทอร์มินัลและ SSH


11

เครื่อง Linux ในพื้นที่ของฉันมีเอาต์พุตเทอร์มินัลสีเช่นนี้

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อฉัน SSH เป็นกล่อง pfSense / BSD มันจะเปลี่ยนสีเช่นนี้

ป้อนคำอธิบายรูปภาพที่นี่

แม้ว่าฉันจะ SSH จากไปยังเครื่องที่ไม่มีช่องสัญญาณสีท้องถิ่นและ SSH จากที่นั่นไปยังกล่อง pfSense / FreeBSD นี้จะเปิดใช้งานเอาต์พุตสีและเริ่มสร้างเอาต์พุตสีที่ไม่ต้องการ /

มีบางอย่างที่ฉันสามารถเปลี่ยนได้เฉพาะที่เพื่อให้เมื่อฉัน SSH ไปยังกล่อง pfSense จากเครื่องท้องถิ่นของฉันหรือผ่านเครื่องตัวกลางลูกค้าของฉันจะเพิกเฉยต่อการตั้งค่าสีระยะไกล เป็นการดีที่ฉันต้องการอยู่ในสีดำและสีขาวพื้นหลังมาตรฐานสองโทนและสีข้อความเท่านั้น?


คุณใช้เทอร์มินัลอะไรอยู่
gertvdijk

1
ที่นี่ฉันกำลังเรียกใช้ Mint Linux 13 ดังนั้นจึงเป็น Xfce Terminal Emulator 0.4.8
jwbensley

ฉันรู้ว่านี่ไม่ใช่สิ่งที่คุณต้องการ แต่คุณได้พิจารณาเปลี่ยนการตั้งค่าเทอร์มินัลเป็นข้อความ [หรือสีเทาอ่อน] บนพื้นหลังสีดำหรือไม่ นั่นคือโครงร่างสีพื้นฐานที่ทุกสิ่งได้รับการออกแบบมาเพื่อทำงานร่วมกับ หรือคุณสามารถเปลี่ยนการตั้งค่าพรอมต์ของคุณบนเครื่องระยะไกล (อาจเป็น. bash_profile) เพื่อให้มีสีที่ดีขึ้นหรือไม่มีสีเลย
Random832

1
ปกติฉันจะทำบางอย่างTERM=xterm-mono ssh user@hostเพื่อให้ได้การตั้งค่านั้นในสภาพแวดล้อมระยะไกล
ott--

คำตอบ:


7

สีในเทอร์มินัลของคุณจะปรากฏขึ้นเนื่องจาก tty ส่งลำดับการควบคุมที่เข้ารหัส ANSI เพื่อแจ้งให้เทอร์มินัลของคุณเปลี่ยนสี บางตัวหากไม่ใช่แอพพลิเคชั่นเทอร์มินัลส่วนใหญ่สามารถกำหนดค่าให้ละเว้นสิ่งนี้และแสดงข้อความทั้งหมดในสีเดียว

ในxtermคุณสามารถใช้-cmตัวเลือก สำหรับ Konsole เราสามารถเปลี่ยนการจับคู่สีทั้งหมดเป็นสีเดียวกันได้ แอปพลิเคชั่นหน้าจอ XFCE ของคุณอาจมีตัวเลือกที่คล้ายกัน


คำตอบนี้อาจช่วยได้ในบางกรณี แต่ไม่ใช่คำตอบจริงๆ ตามที่ระบุไว้ "สีในเทอร์มินัลของคุณปรากฏขึ้นเนื่องจาก tty ส่งลำดับการควบคุมที่เข้ารหัส ANSI เพื่อบอกเทอร์มินัลของคุณให้เปลี่ยนสี" เนื่องจาก SSH อาจให้ TTY จึงควรเป็นไปได้ที่ SSH จะไม่สนใจสี มีความคิดอย่างไรที่จะทำเช่นนี้?
patrik

SSH ไม่ได้ออกแบบมาเพื่อรบกวนข้อมูลมากกว่า tty จริง ๆ SSH ตั้งค่าช่องที่คุณสามารถเรียกใช้ฉันไม่คิดว่ามันควรจะเกี่ยวข้องในการแก้ไขข้อมูลผ่านช่องทางนั้น อย่างไรก็ตามมีบริบทและข้อมูลเมตาเช่นตัวแปรสภาพแวดล้อมที่ส่งผ่านจากไคลเอนต์ไปยังเซิร์ฟเวอร์ในช่วงเวลาการตั้งค่าของแชนเนลนั้น
gertvdijk

7

การเปลี่ยนTERMตัวแปรเป็นรายการบางรายการที่เข้ากันได้ แต่ไม่มีการรองรับสีอาจใช้งานได้ ชอบ:

TERM=xterm-old

โดยพื้นฐานแล้วคุณต้องมีTERMฐานข้อมูลที่รู้จักโดย FreeBSD ระบบ termcap หรือฐานข้อมูล terminfo ซึ่งTERM=the-term tput colorsจะไม่ส่งคืนจำนวนบวกและสำหรับ GNU ls หนึ่งซึ่งdircolors -p | grep -x 'TERM the-term'ไม่มีผลตอบแทนใด ๆ อาจยังไม่สามารถใช้งานได้กับแอปพลิเคชันที่ลำดับการหลีกเลี่ยงสีเอาท์พุทโดยไม่คำนึงว่าเทอร์มินัลอ้างว่าให้การสนับสนุนหรือไม่

หรือคุณสามารถใช้ GNU screenเพื่อปิดการใช้งานสีเช่น (ไวยากรณ์ zsh):

screen -c =(printf %s\\n "termcapinfo * 'AF=\E[1m:AB=\E[7m'") ssh ...

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

ฉันคิดว่าทุกอย่างจะเดือดร้อนจากข้อเท็จจริงที่ว่า FreeBSD สันนิษฐานว่าพื้นหลังเทอร์มินัลเป็นสีดำ (หรืออย่างน้อยก็มืด) โดยที่คุณใช้xtermแทนคุณxfce-terminalสามารถเปลี่ยนพื้นหลังและสีพื้นหน้าและ / หรือสีแต่ละสีแบบไดนามิกเพื่อตั้งค่าโปรไฟล์สีที่แตกต่างกัน ทำผ่านลำดับการหลีกเลี่ยง แต่คุณสามารถใช้xtermcontrolคำสั่งที่ทำให้ง่ายขึ้น


พยายามว่า - ไม่ได้ผลสำหรับฉัน export TERM=vt100ก่อนหน้านี้ls --colorยังคงแสดงเอาท์พุท colorized
gertvdijk

@ gertvdijk จุดที่ดี ดูเหมือนว่ามีข้อผิดพลาดใน GNU ls ซึ่งโดยค่าเริ่มต้นรหัสยากvt100ว่าเป็นขั้วที่มีการสนับสนุนสี ฉันได้เปลี่ยนสิ่งxterm-oldที่ไม่มีปัญหานั้น แต่อาจไม่มีรายการ terminfo ใน FreeBSD
Stéphane Chazelas

ดีมันไม่ได้ป้องกันไม่ให้โปรแกรมอื่น ๆ จากการแสดงผลสีได้เป็นอย่างดี - byobuคือ ฉันใช้ Ubuntu 12.04 btw
gertvdijk

1
@gertvdijk อย่างที่ฉันพูด ใช้งานได้กับโปรแกรมที่มีพฤติกรรมดีเท่านั้นที่ใช้$TERMและฐานข้อมูล termcap / terminfo (ผ่าน curses หรือเทอร์มินัล API อื่น ๆ ) แทนการ hardcoding ลำดับ escape
Stéphane Chazelas

ฉันจะใช้อะไรเพื่อลบลำดับ escape ทั้งหมดที่สามารถเปลี่ยนสถานะเทอร์มินัลหลังจาก EOF
Janus Troelsen

2

พิมพ์คำสั่งต่อไปนี้เพื่อลบ:

$ ls --color=none

หรือใช้unaliasเพื่อลบมัน:

$ unalias ls

1
นั่นไม่ได้มีไว้สำหรับlsคอมมอนหรือเปล่า?
jwbensley

ls ใช้นามแฝงเป็น "ls --color = tty"
Len

ใช่. ฉันรู้ว่า. แต่เทอร์มินอลเอาท์พุททั้งหมดของฉันคือเอาท์พุทสีไม่ใช่แค่lsคำสั่งดังนั้นตามความเห็นก่อนหน้าของฉัน: นั่นไม่เพียงแค่จะหยุดlsการผลิตเอาต์พุตสีทุกอย่างอื่นจะยังคงเป็นสีใช่หรือไม่
jwbensley

ใช่เฉพาะส่วนของคำสั่ง
Len

1
คุณใช้ xterm อยู่หรือเปล่า xterm -cm
Len

1

ในกรณีที่คุณไม่ต้องการแก้ไข ~ / .bashrc ซึ่งฉันแน่ใจว่ามีบางสิ่งเช่นexport PS2=.....+colors......:

บนคอนโซล linux ลองใช้วิธีใดวิธีหนึ่งTERM=linux-m1bหรือTERM=linux-m2รับโมโนโครมเป็น "สีเทา / สีขาว / สีดำและสีดำ" สำหรับ linux-m1b หรือ "สีเขียว / สีขาว / สีดำและสีน้ำเงิน" (เหล้าองุ่น!) สำหรับ linux-m2 ...

ด้วย Putty (มีพอร์ตสำหรับผู้ใช้ Mac) ให้ใช้TERM=putty-m1bและTERM=putty-m2แทน ...

สิ่งนี้จะทำในสิ่งที่คุณต้องการ แต่: คุณจะต้องมีฐานข้อมูล terminfo ล่าสุดสำหรับสิ่งนั้นหรือนำมาจากที่นั่นหากจำเป็น: wget http://canal.chez.com/linux.ti ; tic -x linux.ti

อเล็กซ์ PS: xterm-mono ดูเหมือนว่าจะไม่อยู่อีกต่อไป


-1

ก่อนอื่นให้ตรวจสอบนามแฝงเริ่มต้นของคุณ:

alias

alias ls-'ls --color=auto

หากไม่ได้ผลและคุณต้องมีวิธีแก้ไขปัญหาอย่างรวดเร็ว ลองสิ่งนี้lsและawkไปป์:

vi /usr/local/bin/list
#!/bin/bash
ls $1
exit

ตั้ง 744perms
ที่เดียวที่ปลอดภัยสำหรับสิ่งนี้คือ/usr/local/bin ให้แน่ใจว่า PATH ของคุณรวม/usr/local/binอยู่ด้วย

ใช้ดุลยพินิจอีกครั้ง

สิ่งหนึ่ง ... สีมีความหมายไปยังไดเรกทอรีธง ... ปิดls="ls --color=auto"ใบชื่อเท่านั้น ... ls -aFหรือจะผนวกชื่อไดเรกทอรีที่มีls -F /ดังนั้นฉันขอแนะนำให้คุณระวัง คุณสามารถหรือalias ls="ls -aF"alias ls="ls -F"


2
คำตอบนี้ให้คำตอบสำหรับคำถามต้นฉบับอย่างไร
jwbensley

ยินดีต้อนรับสู่ Stack Overflow! ผมขอแนะนำให้คุณใช้เวลาทัวร์
Stephen Rauch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.