50

From here I understand that to disable Ctrl+S the stty -ixon command can be used and it works, but as soon as I close the terminal and open another I have to re-enter the command.

To permanently disable Ctrl+S I have made a startup.sh that contains the stty -ixon command and run it with crontab at @reboot but it does not work.

So what will be the solution to permanently disable Ctrl+S?

Cristian
  • 735
  • 2
  • 7
  • 17
  • 4
    Reminder: if you hit CTRL+S by mistake, you can use CTRL+Q to restore data flow from the terminal. – jjmontes Dec 26 '16 at 14:15
  • 6
    The reason your startup.sh does not work, but the accepted answer does work, is that it has to be done every time a new (pseudo)terminal is activated. – zwol Dec 27 '16 at 04:20

2 Answers2

60

To disable Ctrl-s permanently in terminal just add this line at the end of your .bashrc script (generally in your home directory)

stty -ixon

An explanation of why this exists and what it relates to can be found in this answer: https://retrocomputing.stackexchange.com/a/7266

RedGlyph
  • 133
Dababi
  • 3,355
  • 24
  • 23
  • 5
    a small explanation of what it does would be nice – GoTTimw Apr 26 '19 at 15:31
  • My .bashrc complains about that when I log into my window manager - a modal dialog with an error is displayed (only on Desktop with graphical wm, server ok). – orion3 Aug 08 '19 at 17:42
19

As others have mentioned, the required fix is adding stty -ixon to your ~/.bashrc file. However, it should be protected from execution by non-interactive shells:

if [[ -t 0 && $- = *i* ]]
then
    stty -ixon
fi 

This should avoid errors when there is no TTY or interactive session in the first place, so "internal" shell invocations of desktop environments etc. will not cause error messages.

telcoM
  • 96,466
  • In the beginning of Ubuntu 20.04's default ~/.bashrc such protection is already there:
    case $- in
        *i*) ;;
          *) return;;
    esac
    
    – Anton Samokat Mar 31 '24 at 15:00
  • In another systems there can be equivalent in ~/.bashrc: # If not running interactively, don't do anything [[ $- != *i* ]] && return – Anton Samokat Mar 31 '24 at 15:02