Come fermare il cursore dal lampeggiare


22

Come faccio ad arrestare il cursore blinkingquando ci si trova in un TTY ? (o altrove).

BONUS Punti per un'impostazione universale che impedisce al cursore di lampeggiare quasi ovunque.

Risposte:


17

Questo ti dà un solido blocco giallo (non lampeggiante) come cursore:

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

Per maggiori informazioni controlla questi riferimenti: Linuxgazette ed EmacsWiki e il file /usr/src/linux/Documentation/VGA-softcursor.txt(se presente sul tuo sistema)


questo funziona per me fino a quando non uso VIM, quindi quando
esco

E questo ti dà un blocco bianco solido non lampeggianteecho -e '\033[?16;0;224c'
Utku

grazie, potrei cambiare l'ultimo numero (224) in 244 per ottenere un solido blocco bianco :)

Non ho alcun effetto di questo sul mio sistema che esegue bash 5.0.11 su Arch Linux
S.Goswami il

26

Esiste una sequenza di controllo standard per disattivare il lampeggiamento del cursore sui terminali.

printf '\033[?12l'

Tuttavia, molti terminali non implementano questa impostazione, quindi continuate a leggere.

Esiste un'impostazione del terminale standard più ampiamente implementata per commutare la visibilità del cursore tra alta visibilità, visibilità normale e invisibilità. Alcuni terminali non fanno differenza tra normale e alto e non vi è alcuna garanzia che l'uno o l'altro possano o non lampeggino. In terminfo , emettere il cvvis, cnormo civisstringa (es tput cvvis). Le voci termcap corrispondenti sono vs, vee vi.

Queste impostazioni non sopravvivranno a un reset del terminale , quindi potresti scoprire che non sopravvive all'avvio di molte applicazioni a schermo intero. È possibile superare questa difficoltà aggiungendo la sequenza di modifica della configurazione del cursore alla stringa di ripristino del terminale.

  • Su un sistema basato su terminfo che utilizza ncurses, salvare le impostazioni terminfo del terminale in un file con infocmp >>~/etc/terminfo.txt. Modificare la descrizione per modificare la rs1sequenza (ripristino di base), ad es. Sostituire rs1=\Eccon rs1=\Ec\E[?12l. Con alcuni programmi e impostazioni, potrebbe essere necessario modificare anche rs2(ripristino completo). Quindi compilare la descrizione del terminfo con tic ~/etc/terminfo.txt(questo scrive sotto la directory $TERMINFO, o ~/.terminfose non impostato).
  • Su un sistema basato su termcap, prendi le impostazioni di termcap dal tuo database termcap (in genere /etc/termcap). Modificare le sequenze is(ripristino di base) e rs(ripristino completo) per aggiungere le impostazioni, ad es :is=\Ec\E[?12l:. Impostare la TERMCAPvariabile di ambiente sul valore modificato (che inizia e termina con :).

Alcuni terminali e altre applicazioni offrono più opzioni:

  • Il cursore xterm lampeggia se la cursorBlinkrisorsa è impostata su trueo l' -bcopzione è passata sulla riga di comando. La frequenza di lampeggiamento è personalizzabile tramite le risorse cursorOnTimee cursorOffTime.
  • Alcuni altri emulatori di terminale GUI possono far lampeggiare il cursore; controlla la finestra di dialogo di configurazione.
  • La console Linux PC (VGA) ha un numero di impostazioni del cursore; il loro esatto significato e applicabilità dipende dall'implementazione VGA sottostante (framebuffer Linux o scheda video). Se il cursore predefinito lampeggia, prova a disattivare il cursore hardware e il cursore software su qualcosa di simile printf '\033[17;127?c'(il primo parametro 17 ti dà il cursore software senza un cursore hardware e il secondo parametro impostato su 127 lo rende essenzialmente video inverso). Vedi sopra per quanto riguarda i reset dei terminali.
  • In EmacsM-x blink-cursor-mode attiva / disattiva il lampeggiamento del cursore. Metti il (blink-cursor-mode 0)tuo ~/.emacsper spegnerlo. Questa è un'impostazione globale e non si applica in un terminale di testo.

Vedi anche la pagina No Blinking di Juri Linkov ( Jurta ) per come disattivare il lampeggiamento in Lesstif, Tk, Gtk (Gnome), Qt (KDE), Firefox e altro.


14

Ho trovato questo più semplice se si dispone dei permessi di root:

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

L'ho messo nello script di avvio della macchina come /etc/rc.localper Arch Linux.


5

In Linux tty puoi usare la sequenza di escape "\e[?48;0;64"o qualunque cosa ti piaccia, ma questo non funziona in tmux / vim. Tmux / Vim emette un comando "cnorm" all'avvio che per impostazione predefinita contiene un "\e[?0c". Puoi vedere che questo annulla gli effetti dell'impostazione sopra. È necessario modificare cnorm alla sequenza precedente per consentire alle applicazioni TUI di ripristinare il cursore in base alle proprie preferenze. Maggiori informazioni su questo da parte di Gilles ma se stai cercando una soluzione rapida prova questo:

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

L'ultimo comando genererà il nuovo terminfo in base al ~/.terminfoquale dovrebbe essere prelevato automaticamente se si riavvia tmux server / vim.


3

Mettere

\ 033 [17;? 0; 127c

alla tua variabile PS1 e smetterai di lampeggiare costantemente.

PER ESEMPIO:

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


1
Questo (almeno per me) rovinerà le interruzioni della linea del terminale (overflow della linea). Usa parentesi quadre, fuggito: ad esempio BLUEBOXNOBLINK="\033[?17;0;60c", quindiPS1="\[$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

È una soluzione meravigliosa e probabilmente ha ricevuto molti voti, se l'autore non si fosse dimenticato di spiegarlo ... :-)
Peter dice di reintegrare Monica il

1
-cursor offnon è proprio quello che viene richiesto, fa sparire il cursore ... setterm -blink offsembra più promettente, ma influenza il testo, non il cursore vero e proprio.
mr.spuratic,

setterm -cursor off; setterm -cursor onfunziona qui, ma è una soluzione inaccettabile
Thor,

0

metto

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

in /etc/rc.local e creato un servizio systemd per esso usando le istruzioni online. Tuttavia, ho notato che a volte dopo l'avvio il cursore lampeggia ancora. Sarebbe bene conoscere il modo corretto di disattivare permanentemente il lampeggiamento del cursore tramite sysfs su un sistema systemd moderno, qualcuno ha qualche consiglio? Alcune distribuzioni hanno /etc/sysfs.conf ma sto eseguendo Arch e non trovo questo file in sysfsutils o altrove.

Come soluzione temporanea ho eseguito il seguente comando

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

Qualche sperimentazione ha dimostrato che il "255c" alla fine funziona meglio di "127c" sopra elencato, produce un cursore bianco anziché grigio.


0

Per console Linux:

Alternativa 1

Aggiungi -I "\033[?17;0;255c"un'opzione alle gettylinee nel tuo /etc/inittabfile. Fare così:

  1. Apri il /etc/inittabfile con un editor di testo. Dovrebbero esserci linee che contengono gettyo agettyo simili. Un esempio è:

    tty1::respawn:/sbin/getty 38400 tty1
    
  2. Aggiungi -I "\033[?17;0;255c"a ciascuna gettyriga. Ad esempio, dopo aver aggiunto -I "\033[?17;0;255c", la gettyriga sopra dovrebbe apparire come segue:

    tty1::respawn:/sbin/getty -I "\033[?17;0;255c" 38400 tty1
    
  3. Riavvia il sistema o, in alternativa, termina tutti i gettyprocessi.

Alternativa 2

Una migliore alternativa è quella di mettere ESC[?17;0;255cin /etc/issue, invece di mettere a gettylinee. Fare questo usando viè il seguente:

  1. Apri /etc/issueusando vi.
  2. In qualsiasi parte del /etc/issuefile, inserisci la modalità di inserimento.
  3. Mentre si è in modalità inserimento, premere ^V(ovvero, Ctrlv), quindi premere Esc. Il carattere di escape dovrebbe ora essere inserito.
  4. Ora, inserisci i caratteri rimanenti, che sono [?17;0;255c.

Alternativa 3

Un'altra alternativa è mantenere il cursore hardware (anziché utilizzare un cursore software) e smettere di lampeggiare il cursore hardware e renderlo un cursore a blocchi. Fare così:

  1. Aggiungi quanto segue a /etc/inittab:

    # Stop cursor blink on Linux console
    ::sysinit:/bin/sh -c "echo 0 > /sys/class/graphics/fbcon/cursor_blink"
    
  2. Aggiungi ESC[?8ca /etc/issue. Fare riferimento a "Alternativa 2" per istruzioni su come eseguire questa operazione.

Tuttavia, con questa opzione, il cursore non diventa bianco brillante. Immagino che ciò sia possibile solo usando il cursore software.

Dopo aver seguito una di queste alternative, otterrai un cursore a blocchi bianco, non lampeggiante.

Ulteriori informazioni


0

Questo nasconde completamente il cursore.

tput civis

Per ripristinare:

tput cnorm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.