How to change cursor shape, color, and blinkrate of Linux Console?

I know I can change some fundamental settings of the Linux console, things like fonts, for instance, with dpkg-reconfigure console-setup.

But I’d like to change things like blinkrate, color, and shape (I want my cursor to be a block, at all times). I’ve seen people accomplishing this. I just never had a chance to ask those people how to do that.

I don’t mean terminal emulator windows, I mean the Linux text console, you reach with Ctrl+Alt+F-key

I’m using Linux Mint at the moment, which is a Debian derivate. I’d like to know how to do that in Fedora as well, though.


Edit: I might be on to something

I learned from this website, how to do the changes I need. But I’m not finished yet.

I’ve settled on using echo -e "e[?16;0;200c" for now, but I’ve got a problem: when running applications like vim or irssi, or attaching a screen session, the cursor reverts back to being a blinking gray underscore.

And of course, it only works on this one tty all other text consoles are unaffected.

So how can I make those changes permanent? How can I populate them to other consoles?

Asked By: polemon

||

If you use bash, you can use PROMPT_COMMAND which will execute a command after each command. Put the following in your .bashrc

PROMPT_COMMAND='echo -e "e[?16;0;200c"'
Answered By: Silverrocker

GitHub Gist: How to change cursor shape, color, and blinkrate of Linux Console

I define the following cursor formatting settings in my .bashrc file (or /etc/bashrc):

##############
# pretty prompt and font colors
##############

# alter the default colors to make them a bit prettier
echo -en "e]P0000000" #black
echo -en "e]P1D75F5F" #darkred
echo -en "e]P287AF5F" #darkgreen
echo -en "e]P3D7AF87" #brown
echo -en "e]P48787AF" #darkblue
echo -en "e]P5BD53A5" #darkmagenta
echo -en "e]P65FAFAF" #darkcyan
echo -en "e]P7E5E5E5" #lightgrey
echo -en "e]P82B2B2B" #darkgrey
echo -en "e]P9E33636" #red
echo -en "e]PA98E34D" #green
echo -en "e]PBFFD75F" #yellow
echo -en "e]PC7373C9" #blue
echo -en "e]PDD633B2" #magenta
echo -en "e]PE44C9C9" #cyan
echo -en "e]PFFFFFFF" #white
clear #for background artifacting

# set the default text color. this only works in tty (eg $TERM == "linux"), not pts (eg $TERM == "xterm")
setterm -background black -foreground green -store

# http://linuxgazette.net/137/anonymous.html
cursor_style_default=0 # hardware cursor (blinking)
cursor_style_invisible=1 # hardware cursor (blinking)
cursor_style_underscore=2 # hardware cursor (blinking)
cursor_style_lower_third=3 # hardware cursor (blinking)
cursor_style_lower_half=4 # hardware cursor (blinking)
cursor_style_two_thirds=5 # hardware cursor (blinking)
cursor_style_full_block_blinking=6 # hardware cursor (blinking)
cursor_style_full_block=16 # software cursor (non-blinking)

cursor_background_black=0 # same color 0-15 and 128-infinity
cursor_background_blue=16 # same color 16-31
cursor_background_green=32 # same color 32-47
cursor_background_cyan=48 # same color 48-63
cursor_background_red=64 # same color 64-79
cursor_background_magenta=80 # same color 80-95
cursor_background_yellow=96 # same color 96-111
cursor_background_white=112 # same color 112-127

cursor_foreground_default=0 # same color as the other terminal text
cursor_foreground_cyan=1
cursor_foreground_black=2
cursor_foreground_grey=3
cursor_foreground_lightyellow=4
cursor_foreground_white=5
cursor_foreground_lightred=6
cursor_foreground_magenta=7
cursor_foreground_green=8
cursor_foreground_darkgreen=9
cursor_foreground_darkblue=10
cursor_foreground_purple=11
cursor_foreground_yellow=12
cursor_foreground_white=13
cursor_foreground_red=14
cursor_foreground_pink=15

cursor_styles="e[?${cursor_style_full_block};${cursor_foreground_black};${cursor_background_green};c" # only seems to work in tty

# http://www.bashguru.com/2010/01/shell-colors-colorizing-shell-scripts.html
prompt_foreground_black=30
prompt_foreground_red=31
prompt_foreground_green=32
prompt_foreground_yellow=33
prompt_foreground_blue=34
prompt_foreground_magenta=35
prompt_foreground_cyan=36
prompt_foreground_white=37

prompt_background_black=40
prompt_background_red=41
prompt_background_green=42
prompt_background_yellow=43
prompt_background_blue=44
prompt_background_magenta=45
prompt_background_cyan=46
prompt_background_white=47

prompt_chars_normal=0
prompt_chars_bold=1
prompt_chars_underlined=4 # doesn't seem to work in tty
prompt_chars_blinking=5 # doesn't seem to work in tty
prompt_chars_reverse=7

prompt_reset=0

#start_prompt_coloring="e[${prompt_chars_bold};${prompt_foreground_black};${prompt_background_green}m"
start_prompt_styles="e[${prompt_chars_bold}m" # just use default background and foreground colors
end_prompt_styles="e[${prompt_reset}m"

PS1="${start_prompt_styles}[u@h W] $${end_prompt_styles}${cursor_styles} "

##############
# end pretty prompt and font colors
##############
Answered By: mulllhausen

Most apps use the cnorm capability to set the cursor back to the "normal" state. By default this is the blinking underline. But you can override this in your terminfo. This should fix most applications (vim, tmux, etc.). Issue this command:

infocmp linux | sed 's/cnorm=[^,]*/cnorm=\E[?25h\E[?48;0;32c/' | tic -

This should create ~/.terminfo/l/linux which should be picked up by most of the terminal apps next time they run.

Answered By: ypsu

Assuming you use GNU/Linux and have root access, you can modify cursor in tty mode by modifying /sys/module/vt/parameters/cur_default file. By doing

echo 0 > /sys/module/vt/parameters/cur_default

will set "block cursor".

You may want to change the values, from 0-7, to get other shapes. (I’ve tested it on Mint 19.3, Ubuntu 16.04 and a few other Debian distros, it works in tty (as you asked) but on few occasions it did not work. I found the above by accident. I tried setterm suggeseted by @user13742 and it works for me. I suspect setterm achieves that by modifying the files in /sys/module/vt/parameter.)

source:
Show current "setterm" values/settings

https://bbs.archlinux.org/viewtopic.php?id=154433

Answered By: TBourne

I added the following two parameters to my kernel command line in grub; this gives me a permanent full block blinking green cursor:

vt.cur_default=6 vt.color=2

The standard, unmodified colors for vt.color you can pick from are (see the setvtrgb command to change them):

+--------+--------+---------+
| Normal | Bright | Color   |
+--------+--------+---------+
|      0 |      8 | Black   |  
|      1 |      9 | Red     |  
|      2 |     10 | Green   |
|      3 |     11 | Yellow  |
|      4 |     12 | Blue    |
|      5 |     13 | Magenta |
|      6 |     14 | Cyan    |
|      7 |     15 | White   |  
+---------------------------+
Answered By: Scott G.
Categories: Answers Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.