How do I make the cursor stop
blinking when in a TTY? (or anywhere else).
BONUS Points for one universal setting that stops the cursor blinking almost everywhere.
There is a standard control sequence to turn off cursor blinking on terminals.
However many terminals do not implement this setting, so read on.
There is a more widely implemented standard terminal setting for switching cursor visibility between high visibility, normal visibility and invisibility. Some terminals don't make a difference between normal and high, and there's no guarantee that one or the other will or will not blink. In terminfo, emit the
civis string (e.g.
tput cvvis). The corresponding termcap entries are
These setting will not survive a terminal reset, so you may find that it doesn't survive the launching of many full-screen applications. You can overcome this difficulty by adding the cursor configuration changing sequence to your terminal's reset string.
infocmp >>~/etc/terminfo.txt. Edit the description to change the
rs1(basic reset) sequence, e.g. replace
rs1=\Ec\E[?12l. With some programs and settings, you may need to change the
rs2(full reset) as well. Then compile the terminfo description with
tic ~/etc/terminfo.txt(this writes under the directory
/etc/termcap). Change the
is(basic reset) and
rs(full reset) sequences to append your settings, e.g.
:is=\Ec\E[?12l:. Set the
TERMCAPenvironment variable to the edited value (beginning and ending with
Some terminals and other applications give you more options:
cursorBlinkresource is set to
-bcoption is passed on the command line. The blink rate is customizable through the
printf '\033[17;127?c'(the first parameter 17 gives you the software cursor without a hardware cursor, and the second parameter set to 127 makes it essentially inverse video). See above regarding terminal resets.
M-x blink-cursor-modetoggles the cursor's blinking. Put
(blink-cursor-mode 0)in your
~/.emacsto turn it off. This is a global setting and does not apply in a text terminal.
See also Juri Linkov (Jurta)'s No Blinking page for how to turn off blinking in Lesstif, Tk, Gtk (Gnome), Qt (KDE), Firefox, and more.
In the linux tty you can use the escape sequence
"\e[?48;0;64" or whatever you like but this doesn't work in tmux/vim. Tmux/Vim issue a "cnorm" command on startup which by default contains a
"\e[?0c". You can see that this undoes the effects of the above setting. You need to change cnorm to the above sequence in order for the TUI applications to reset the cursor to your preference. More info on this by Gilles but if you are looking for a quick fix try this:
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
The last command will generate the new terminfo under
~/.terminfo which should be picked up automatically if you restart tmux server/vim.
echo 0 > /sys/class/graphics/fbcon/cursor_blink
in /etc/rc.local and created a systemd service for it using online instructions. However, I noticed that sometimes after boot the cursor is still blinking. It would be good to know the correct way to permanently turn off cursor blinking via sysfs on a modern systemd system, does anyone have any tips? Some distributions have /etc/sysfs.conf but I am running Arch and don't find this file in sysfsutils or elsewhere.
As a temporary fix I ran the following command
sudo zsh -c 'echo -n "\033[?17;0;255c" >> /etc/issue'
Some experimentation showed that the '255c' at the end works better than '127c' listed above, it produces a white rather than grey cursor.
For Linux console:
-I "\033[?17;0;255c" option to
getty lines in your
/etc/inittab file. To do so:
/etc/inittab file with a text editor. There should be lines that contain
agetty or similar. An example is:
tty1::respawn:/sbin/getty 38400 tty1
-I "\033[?17;0;255c" to each
getty line. As an example, after adding
-I "\033[?17;0;255c", the
getty line above would look as follows:
tty1::respawn:/sbin/getty -I "\033[?17;0;255c" 38400 tty1
Reboot the system, or alternatively, kill all
A better alternative is to put
/etc/issue, instead of putting it to
getty lines. Doing this using
vi is as follows:
/etc/issuefile, enter insert mode.
^V(that is, Ctrlv), then press Esc. The escape character should now be inserted.
Another alternative is keeping the hardware cursor (instead of using a software cursor) and stop blinking of the hardware cursor and make it a block cursor. To do so:
Add the following to
# Stop cursor blink on Linux console ::sysinit:/bin/sh -c "echo 0 > /sys/class/graphics/fbcon/cursor_blink"
/etc/issue. Refer to "Alternative 2" for instructions on doing this.
However, with this option, the cursor does not become bright white. I guess this is only possible with using the software cursor.
After following any of these alternatives, you will obtain a white, non-blinking, block cursor.