วิธีหยุดเคอร์เซอร์ไม่ให้กะพริบ


22

ฉันจะทำให้เคอร์เซอร์หยุดblinkingเมื่ออยู่ในTTY ได้อย่างไร (หรือที่อื่น ๆ )

คะแนนโบนัสสำหรับการตั้งค่าสากลหนึ่งรายการที่หยุดเคอร์เซอร์กะพริบเกือบทุกที่

คำตอบ:


17

สิ่งนี้ทำให้คุณมีบล็อกสีเหลืองทึบ (ไม่กะพริบ) เป็นเคอร์เซอร์:

echo -n -e '\e[?17;14;224c'

สำหรับข้อมูลเพิ่มเติมตรวจสอบข้อมูลอ้างอิงเหล่านี้: LinuxgazetteและEmacsWikiรวมถึงไฟล์/usr/src/linux/Documentation/VGA-softcursor.txt(หากมีอยู่ในระบบของคุณ)


สิ่งนี้ใช้ได้กับฉันจนกว่าฉันจะใช้เสียงเรียกเข้าจากนั้นเมื่อฉันออกจากเคอร์เซอร์จะกลับมากะพริบ :(
mulllhausen

และสิ่งนี้จะช่วยให้คุณมีบล็อกสีขาวทึบที่ไม่กะพริบecho -e '\033[?16;0;224c'
Utku

ขอบคุณฉันสามารถเปลี่ยนหมายเลขสุดท้าย (224) เป็น 244 เพื่อรับบล็อกสีขาวทึบ:)

ฉันไม่มีผลกระทบใด ๆ กับสิ่งนี้ในระบบที่ใช้ bash 5.0.11 บน Arch Linux
S.Goswami

26

มีลำดับการควบคุมมาตรฐานเพื่อปิดเคอร์เซอร์กะพริบที่อาคาร

printf '\033[?12l'

อย่างไรก็ตามเทอร์มินัลจำนวนมากไม่ใช้การตั้งค่านี้ดังนั้นโปรดอ่านต่อ

มีการตั้งค่าเทอร์มินัลมาตรฐานที่ใช้กันอย่างแพร่หลายมากขึ้นสำหรับการสลับการมองเห็นเคอร์เซอร์ระหว่างการมองเห็นสูงการมองเห็นปกติและการล่องหน เทอร์มินัลบางตัวไม่สร้างความแตกต่างระหว่างปกติและสูงและไม่มีการรับประกันว่าอย่างใดอย่างหนึ่งจะหรือจะไม่กระพริบตา ในterminfo , ปล่อยcvvis, cnormหรือcivisสตริง (เช่นtput cvvis) ที่สอดคล้องtermcapรายการมีvs, และvevi

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

  • บนระบบ terminfo โดยใช้ ncurses บันทึกของสถานีของคุณ terminfo infocmp >>~/etc/terminfo.txtตั้งค่าไปยังไฟล์ที่มี แก้ไขคำอธิบายในการเปลี่ยนแปลงrs1(ตั้งค่าพื้นฐาน) ลำดับเช่นแทนที่โดยrs1=\Ec rs1=\Ec\E[?12lในบางโปรแกรมและการตั้งค่าคุณอาจต้องเปลี่ยนrs2(รีเซ็ตแบบเต็ม) เช่นกัน จากนั้นคอมไพล์คำอธิบาย terminfo ด้วยtic ~/etc/terminfo.txt(สิ่งนี้เขียนภายใต้ไดเร็กทอรี$TERMINFOหรือ~/.terminfoถ้าไม่ได้ตั้งค่า)
  • บนระบบที่ใช้ termcap คว้าการตั้งค่า termcap จากฐานข้อมูล termcap ของคุณ (โดยทั่วไป/etc/termcap) เปลี่ยนis(ตั้งค่าพื้นฐาน) และrs(รีเซ็ตเต็ม) :is=\Ec\E[?12l:ลำดับที่จะผนวกการตั้งค่าของคุณเช่น ตั้งค่าTERMCAPตัวแปรสภาพแวดล้อมเป็นค่าที่แก้ไข (เริ่มต้นและลงท้ายด้วย:)

เทอร์มินัลและแอปพลิเคชั่นอื่น ๆ บางตัวมีตัวเลือกเพิ่มเติมให้คุณ:

  • xtermกะพริบเคอร์เซอร์ถ้าcursorBlinkทรัพยากรที่มีการตั้งค่าtrueหรือ-bcตัวเลือกที่ถูกส่งผ่านในบรรทัดคำสั่ง อัตราการกะพริบสามารถปรับแต่งได้ผ่านทางcursorOnTimeและcursorOffTimeทรัพยากร
  • ตัวเลียนแบบเทอร์มินัล GUI อื่น ๆ สามารถกะพริบเคอร์เซอร์ได้ ตรวจสอบกล่องโต้ตอบการกำหนดค่าของพวกเขา
  • ลินุกซ์พีซี (VGA) คอนโซลมีจำนวนของการตั้งค่าเคอร์เซอร์; ความหมายและการบังคับใช้ที่แน่นอนนั้นขึ้นอยู่กับการนำ VGA มาใช้ (Linux framebuffer หรือการ์ดวิดีโอ) หากเคอร์เซอร์เริ่มต้นของคุณกระพริบให้ลองปิดเคอร์เซอร์ฮาร์ดแวร์และเคอร์เซอร์ซอฟต์แวร์จะเปิดขึ้นพร้อมกับสิ่งที่ต้องการprintf '\033[17;127?c'(พารามิเตอร์แรก 17 ให้เคอร์เซอร์ซอฟต์แวร์โดยไม่มีเคอร์เซอร์ฮาร์ดแวร์และพารามิเตอร์ตัวที่สองตั้งไว้ที่ 127 ทำให้วิดีโอเป็นวิดีโอผกผัน) ดูด้านบนเกี่ยวกับการรีเซ็ตเทอร์มินัล
  • ในEmacs , M-x blink-cursor-modeสลับกระพริบของเคอร์เซอร์ ใส่(blink-cursor-mode 0)ในของคุณ~/.emacsเพื่อปิด นี่เป็นการตั้งค่าส่วนกลางและไม่ได้ใช้ในเทอร์มินัลข้อความ

ดูหน้าไม่มีการกะพริบของ Juri Linkov (Jurta)สำหรับวิธีปิดการกะพริบใน Lesstif, Tk, Gtk (Gnome), Qt (KDE), Firefox และอีกมากมาย


14

ฉันพบสิ่งนี้จะง่ายขึ้นถ้าคุณมีสิทธิ์ใช้งานรูท:

~$ echo 0 > /sys/class/graphics/fbcon/cursor_blink

ฉันใส่ไว้ในสคริปต์เริ่มต้นของเครื่องเช่น/etc/rc.localสำหรับ linux arch


5

ใน linux tty คุณสามารถใช้ escape sequence "\e[?48;0;64"หรืออะไรก็ได้ที่คุณชอบ แต่มันไม่ทำงานใน tmux / vim Tmux / กลุ่มออกคำสั่ง "cnorm" "\e[?0c"ในการเริ่มต้นซึ่งเริ่มต้นโดยมี คุณสามารถเห็นได้ว่าสิ่งนี้จะยกเลิกผลกระทบของการตั้งค่าข้างต้น คุณต้องเปลี่ยน cnorm เป็นลำดับข้างต้นเพื่อให้แอปพลิเคชัน TUI รีเซ็ตเคอร์เซอร์ตามที่คุณต้องการ ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้โดย Gilles แต่ถ้าคุณกำลังมองหาวิธีแก้ไขปัญหาอย่างรวดเร็วลองทำสิ่งนี้:

infocmp linux > /tmp/linux-terminfo
# Replace the last escape sequence here with your colors and settings
sed -i 's/cnorm=\\E\[?25h\\E\[?0c/cnorm=\\E[?25h\\E?48;0;64c/' /tmp/linux-terminfo
tic /tmp/linux-terminfo

คำสั่งสุดท้ายจะสร้าง terminfo ใหม่ภายใต้~/.terminfoซึ่งควรเลือกโดยอัตโนมัติหากคุณรีสตาร์ท tmux server / vim


3

ใส่

\ 033 [17; 0; 127c

กับตัวแปร PS1 ของคุณและคุณจะหยุดกระพริบอย่างต่อเนื่อง

เช่น:

ส่งออก PS1 = '\ 033 [? 17; 0; 127c \ u: \ w \ $'


1
สิ่งนี้ (อย่างน้อยสำหรับฉัน) จะทำให้สกรูแตกปลายของเทอร์มินัล ใช้วงเล็บหนี: ตัวอย่างเช่นBLUEBOXNOBLINK="\033[?17;0;60c"นั้นPS1="\[$BLUEBOXNOBLINK\]\[$BROWN\]\u \[$CYAN\]\W: \[$NC\]"
เอ็มมานู Berg

0
sudo cp /etc/issue /etc/issue.tmp
setterm -cursor off | sudo tee /etc/issue
cat /etc/issue.tmp | sudo tee --append /etc/issue
sudo rm /etc/issue.tmp
sudo reboot

มันเป็นทางออกที่ยอดเยี่ยมและอาจมี upvotes มากมายหากผู้เขียนไม่ลืมที่จะอธิบาย ... :-)
peterh พูดว่าคืนสถานะโมนิก้า

1
-cursor offไม่ได้ค่อนข้างสิ่งที่จะถามหาที่ทุกคนก็จะทำให้เคอร์เซอร์หายไป ... setterm -blink offดูเหมือนว่ามีแนวโน้มมากขึ้น แต่มันมีผลต่อข้อความไม่เคอร์เซอร์ที่เกิดขึ้นจริง
mr.spuratic

setterm -cursor off; setterm -cursor onทำงานที่นี่ แต่มันเป็นวิธีแก้ปัญหาที่ยอมรับไม่ได้
Thor

0

ฉันใส่

echo 0 > /sys/class/graphics/fbcon/cursor_blink

ใน /etc/rc.local และสร้างบริการ systemd สำหรับมันโดยใช้คำแนะนำออนไลน์ อย่างไรก็ตามฉันสังเกตเห็นว่าบางครั้งหลังจากบูตเคอร์เซอร์ยังคงกะพริบอยู่ มันเป็นการดีที่จะรู้ว่าวิธีที่ถูกต้องในการปิดเคอร์เซอร์กะพริบอย่างถาวรผ่าน sysfs บนระบบ systemd ที่ทันสมัยไม่มีใครมีเคล็ดลับหรือไม่? บางดิสทริบิวชันมี /etc/sysfs.conf แต่ฉันกำลังใช้งาน Arch และไม่พบไฟล์นี้ใน sysfsutils หรือที่อื่น ๆ

เป็นการแก้ไขชั่วคราวฉันวิ่งคำสั่งต่อไปนี้

sudo zsh -c 'echo -n "\033[?17;0;255c" >> /etc/issue'

การทดลองบางอย่างแสดงให้เห็นว่า '255c' ในตอนท้ายทำงานได้ดีกว่า '127c' ที่ระบุไว้ด้านบนมันสร้างเคอร์เซอร์สีขาวมากกว่าเคอร์เซอร์สีเทา


0

สำหรับคอนโซล Linux:

ทางเลือก 1

เพิ่ม-I "\033[?17;0;255c"ตัวเลือกให้กับgettyบรรทัดใน/etc/inittabไฟล์ของคุณ โดยทำดังนี้

  1. เปิด/etc/inittabไฟล์ด้วยโปรแกรมแก้ไขข้อความ ควรจะมีเส้นที่มีgettyหรือagettyหรือคล้ายกัน ตัวอย่างคือ:

    tty1::respawn:/sbin/getty 38400 tty1
    
  2. เพิ่ม-I "\033[?17;0;255c"ในแต่ละgettyบรรทัด ตัวอย่างเช่นหลังจากที่เพิ่ม-I "\033[?17;0;255c"ที่gettyสายดังกล่าวข้างต้นจะมีลักษณะดังต่อไปนี้:

    tty1::respawn:/sbin/getty -I "\033[?17;0;255c" 38400 tty1
    
  3. รีบูทระบบหรือมิฉะนั้นให้ทำลายgettyกระบวนการทั้งหมด

ทางเลือก 2

ทางเลือกที่ดีกว่าคือการใส่ESC[?17;0;255cใน/etc/issueแทนการวางgettyสาย การทำสิ่งนี้โดยใช้viมีดังนี้:

  1. เปิดใช้/etc/issuevi
  2. ที่ใดก็ได้ของ/etc/issueไฟล์เข้าสู่โหมดแทรก
  3. ในขณะที่คุณอยู่ในโหมดแทรกกด^V(นั่นคือCtrlv) Escแล้วกด ตอนนี้ควรแทรกอักขระหลีกเลี่ยง
  4. [?17;0;255cตอนนี้ใส่ตัวอักษรที่เหลือซึ่งเป็น

ทางเลือก 3

อีกทางเลือกหนึ่งคือการรักษาเคอร์เซอร์ฮาร์ดแวร์ (แทนที่จะใช้เคอร์เซอร์ซอฟต์แวร์) และหยุดกระพริบเคอร์เซอร์ฮาร์ดแวร์และทำให้เคอร์เซอร์บล็อก โดยทำดังนี้

  1. เพิ่มรายการต่อไปนี้ใน/etc/inittab:

    # Stop cursor blink on Linux console
    ::sysinit:/bin/sh -c "echo 0 > /sys/class/graphics/fbcon/cursor_blink"
    
  2. เพิ่มไปESC[?8c /etc/issueอ้างถึง "ทางเลือก 2" สำหรับคำแนะนำในการทำเช่นนี้

อย่างไรก็ตามด้วยตัวเลือกนี้เคอร์เซอร์จะไม่กลายเป็นสีขาวสว่าง ฉันเดาว่านี่เป็นไปได้เฉพาะเมื่อใช้เคอร์เซอร์ซอฟต์แวร์

หลังจากทำตามตัวเลือกใด ๆ เหล่านี้คุณจะได้เคอร์เซอร์บล็อกสีขาวไม่มีการกะพริบ

ข้อมูลเพิ่มเติม


0

ซึ่งจะเป็นการซ่อนเคอร์เซอร์อย่างสมบูรณ์

tput civis

หากต้องการ retore:

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