Jak zatrzymać miganie kursora

22

Jak zatrzymać kursor blinkingw TTY ? (lub gdziekolwiek indziej).

BONUS Punkty za jedno ustawienie uniwersalne, które zatrzymuje miganie kursora prawie wszędzie.

Stefan
źródło

Odpowiedzi:

17

To daje ci stały żółty blok (nie mruga) jako kursor:

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

Aby uzyskać więcej informacji, sprawdź następujące odniesienia: Linuxgazette i EmacsWiki, a także plik /usr/src/linux/Documentation/VGA-softcursor.txt(jeśli jest obecny w twoim systemie)

tante
źródło
to działa dla mnie, dopóki nie
użyję
A to daje ci nie mrugający biały blokecho -e '\033[?16;0;224c'
Utku
dzięki, mogę zmienić ostatni numer (224) na 244, aby uzyskać jednolity biały blok :)
Nie mam na to wpływu w moim systemie z uruchomioną wersją bash 5.0.11 na Arch Linux
S.Goswami
26

Istnieje standardowa sekwencja kontrolna, która wyłącza miganie kursora na zaciskach.

printf '\033[?12l'

Jednak wiele terminali nie implementuje tego ustawienia, więc czytaj dalej.

Istnieje szerzej zaimplementowane standardowe ustawienie terminala do przełączania widoczności kursora między dobrą widocznością, normalną widocznością i niewidzialnością. Niektóre terminale nie robią różnicy między normalnym a wysokim, i nie ma gwarancji, że jedno lub drugie będzie mrugać lub nie. W terminfo wydzielają się cvvis, cnormani civisłańcuch (na przykład tput cvvis). Odpowiednie termcap wpisy są vs, vei vi.

To ustawienie nie przetrwa resetu terminala , więc może się okazać, że nie przetrwa on uruchomienia wielu aplikacji pełnoekranowych. Możesz pokonać tę trudność, dodając sekwencję zmiany konfiguracji kursora do łańcucha resetowania terminala.

  • W systemie opartym na terminfo korzystającym z ncurses zapisz ustawienia terminfo terminala w pliku za pomocą infocmp >>~/etc/terminfo.txt. Edytuj opis, aby zmienić rs1sekwencję (resetowanie podstawowe), np. Zamień rs1=\Ecna rs1=\Ec\E[?12l. W przypadku niektórych programów i ustawień konieczna może być również zmiana rs2(pełny reset). Następnie skompiluj opis terminfo z tic ~/etc/terminfo.txt(zapisuje to w katalogu $TERMINFOlub ~/.terminfojeśli nie jest ustawiony).
  • W systemie opartym na termcap pobierz ustawienia termcap z bazy danych termcap (zazwyczaj /etc/termcap). Zmień sekwencje is(podstawowy reset) i rs(pełny reset), aby dołączyć ustawienia, np :is=\Ec\E[?12l:. Ustaw TERMCAPzmienną środowiskową na edytowaną wartość (zaczynającą się i kończącą na :).

Niektóre terminale i inne aplikacje dają więcej opcji:

  • W xterm Kursor miga, jeśli cursorBlinkzasób jest ustawiony truelub -bcopcja jest przekazywane w linii poleceń. Szybkość migania można dostosować za pomocą zasobów cursorOnTimei cursorOffTime.
  • Niektóre inne emulatory terminala GUI mogą mrugać kursorem; sprawdź ich okno dialogowe konfiguracji.
  • (VGA) konsola Linux PC posiada szereg ustawień kursora; ich dokładne znaczenie i zastosowanie zależy od podstawowej implementacji VGA (bufor ramki Linux lub karta wideo). Jeśli domyślny kursor miga, spróbuj wyłączyć kursor sprzętowy i kursor programowy za pomocą czegoś podobnego printf '\033[17;127?c'(pierwszy parametr 17 daje kursor programowy bez kursora sprzętowego, a drugi parametr ustawiony na 127 powoduje, że jest to zasadniczo odwrotne wideo). Patrz wyżej dotyczące resetowania terminali.
  • W Emacs , M-x blink-cursor-modeprzełączanie kursora mruga. Umieścić (blink-cursor-mode 0)w twoich ~/.emacs, aby go wyłączyć. Jest to ustawienie globalne i nie ma zastosowania w terminalu tekstowym.

Zobacz także stronę No Blinking Jurija Linkova (Jurta), aby dowiedzieć się, jak wyłączyć miganie w Lesstif, Tk, Gtk (Gnome), Qt (KDE), Firefox i innych.

Gilles „SO- przestań być zły”
źródło
14

Uznałem, że jest to łatwiejsze, jeśli masz uprawnienia root:

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

Umieściłem go w skrypcie uruchamiania maszyny, jak w /etc/rc.localprzypadku arch. Linux

duraid
źródło
5

W Linuksie tty możesz użyć sekwencji ucieczki "\e[?48;0;64"lub cokolwiek zechcesz, ale to nie działa w tmux / vim. Tmux / Vim wydaje komendę „cnorm” podczas uruchamiania, która domyślnie zawiera "\e[?0c". Widać, że to cofa efekty powyższego ustawienia. Musisz zmienić cnorm na powyższą sekwencję, aby aplikacje TUI mogły zresetować kursor do twoich preferencji. Więcej informacji na ten temat autorstwa Gillesa, ale jeśli szukasz szybkiej poprawki, spróbuj tego:

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

Ostatnie polecenie wygeneruje nowe terminfo, pod ~/.terminfoktórym powinno być pobierane automatycznie po ponownym uruchomieniu serwera / vim.

ypsu
źródło
3

Położyć

\ 033 [? 17; 0; 127c

do zmiennej PS1, a przestaniesz ciągle migać.

NA PRZYKŁAD:

eksport PS1 = '\ 033 [? 17; 0; 127c \ u: \ w \ $'

mru
źródło
1
Spowoduje to (przynajmniej dla mnie) zerwanie przerw w linii terminala (przelanie linii). Użyj nawiasów kwadratowych, znak ucieczki: Na przykład BLUEBOXNOBLINK="\033[?17;0;60c", a następniePS1="\[$BLUEBOXNOBLINK\]\[$BROWN\]\u \[$CYAN\]\W: \[$NC\]"
Emanuel 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
David Svanberg
źródło
Jest to wspaniałe rozwiązanie i prawdopodobnie otrzymał wiele pozytywnych opinii, jeśli autor nie zapomniał tego wyjaśnić ... :-)
peterh mówi o przywróceniu Moniki
1
-cursor offnie jest do końca tym, o co się prosi, powoduje, że kursor znika ... setterm -blink offwydaje się bardziej obiecujący, ale wpływa na tekst, a nie kursor.
mr.spuratic
setterm -cursor off; setterm -cursor ondziała tutaj, ale jest to niedopuszczalne obejście
Thor
0

włożyłem

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

w /etc/rc.local i utworzył dla niego usługę systemową, korzystając z instrukcji online. Zauważyłem jednak, że czasami po uruchomieniu kursor nadal miga. Dobrze byłoby znać prawidłowy sposób trwałego wyłączenia migania kursora za pomocą sysfs na nowoczesnym systemie systemowym, czy ktoś ma jakieś wskazówki? Niektóre dystrybucje mają /etc/sysfs.conf, ale korzystam z Arch i nie mogę znaleźć tego pliku w sysfsutils ani gdzie indziej.

Jako tymczasową poprawkę uruchomiłem następujące polecenie

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

Niektóre eksperymenty wykazały, że „255c” na końcu działa lepiej niż „127c” wymieniony powyżej, daje biały, a nie szary kursor.

Metamorficzny
źródło
0

W przypadku konsoli Linux:

Alternatywa 1

Dodaj -I "\033[?17;0;255c"opcję do gettylinii w /etc/inittabpliku. Aby to zrobić:

  1. Otwórz /etc/inittabplik za pomocą edytora tekstu. Nie powinno być linie, które zawierają gettylub agettylub podobny. Przykładem jest:

    tty1::respawn:/sbin/getty 38400 tty1
    
  2. Dodaj -I "\033[?17;0;255c"do każdej gettylinii. Jako przykład, po dodaniu -I "\033[?17;0;255c"The gettylinia powyżej będzie wyglądać następująco:

    tty1::respawn:/sbin/getty -I "\033[?17;0;255c" 38400 tty1
    
  3. Uruchom ponownie system lub ewentualnie zabij wszystkie gettyprocesy.

Alternatywa 2

Lepszym rozwiązaniem jest umieszczenie ESC[?17;0;255cw /etc/issue, zamiast wprowadzenie go do gettylinii. Wykonanie tego przy użyciu viwygląda następująco:

  1. Otwórz /etc/issueza pomocą vi.
  2. W dowolnym miejscu /etc/issuepliku przejdź do trybu wstawiania.
  3. W trybie wstawiania naciśnij ^V(to znaczy Ctrlv), a następnie naciśnij Esc. Należy teraz wstawić znak zmiany znaczenia.
  4. Teraz wstaw pozostałe znaki, które są [?17;0;255c.

Alternatywa 3

Inną alternatywą jest utrzymanie kursora sprzętowego (zamiast używania kursora programowego) i przestanie mrugać kursorem sprzętowym i uczynienie go kursorem blokowym. Aby to zrobić:

  1. Dodaj następujące elementy do /etc/inittab:

    # Stop cursor blink on Linux console
    ::sysinit:/bin/sh -c "echo 0 > /sys/class/graphics/fbcon/cursor_blink"
    
  2. Dodaj ESC[?8cdo /etc/issue. Instrukcje na ten temat znajdują się w „Alternative 2”.

Jednak przy tej opcji kursor nie staje się jasnobiały. Myślę, że jest to możliwe tylko przy użyciu kursora programowego.

Po zastosowaniu dowolnej z tych opcji otrzymasz biały, nie mrugający kursor blokowy.

Dalsza informacja

Utku
źródło
0

To całkowicie ukrywa kursor.

tput civis

Aby zapisać:

tput cnorm
NVRM
źródło