Как остановить курсор от мигания

22

Как заставить курсор остановиться blinkingв TTY ? (или где-нибудь еще).

Бонус Очки за одну универсальную настройку, которая останавливает мигание курсора почти везде.

Стефан
источник

Ответы:

17

Это дает вам сплошной желтый блок (без связи) в качестве курсора:

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

Для получения дополнительной информации проверьте следующие ссылки: Linuxgazette и EmacsWiki, а также файл /usr/src/linux/Documentation/VGA-softcursor.txt(если имеется в вашей системе)

Tante
источник
это работает для меня, пока я не использую vim, затем, когда я
выхожу,
И это дает вам немигающий сплошной белый блокecho -e '\033[?16;0;224c'
Utku
спасибо, я мог бы изменить последний номер (224) на 244, чтобы получить сплошной белый блок :)
Я не имею никакого влияния на мою систему, работающую под управлением bash 5.0.11 в Arch Linux
S.Goswami
26

Существует стандартная последовательность управления для отключения мигания курсора на клеммах.

printf '\033[?12l'

Однако многие терминалы не поддерживают эту настройку, поэтому читайте дальше.

Существует более широко реализованная стандартная настройка терминала для переключения видимости курсора между высокой видимостью, нормальной видимостью и невидимостью. Некоторые терминалы не делают различий между нормальным и высоким, и нет никакой гарантии, что один или другой будет или не будет мигать. В TERMINFO , испускают cvvis, cnormили civisстроку (например , tput cvvis). Соответствующие записи termcap есть vs, veи vi.

Эти настройки не сохранятся после сброса терминала , поэтому вы можете обнаружить, что они не выдерживают запуск многих полноэкранных приложений. Вы можете преодолеть эту трудность, добавив последовательность изменения конфигурации курсора в строку сброса вашего терминала.

  • В системе terminfo, использующей ncurses, сохраните настройки terminfo вашего терминала в файл с помощью infocmp >>~/etc/terminfo.txt. Отредактируйте описание, чтобы изменить последовательность rs1(основной сброс), например, заменить rs1=\Ecна rs1=\Ec\E[?12l. В некоторых программах и настройках может потребоваться изменить rs2(полный сброс). Затем скомпилируйте описание terminfo с помощью tic ~/etc/terminfo.txt(это записывает в каталог $TERMINFOили, ~/.terminfoесли не установлено).
  • В системе на основе termcap извлеките настройки termcap из базы данных termcap (обычно /etc/termcap). Измените последовательности is(основной сброс) и rs(полный сброс), чтобы добавить свои настройки, например :is=\Ec\E[?12l:. Установите для TERMCAPпеременной среды измененное значение (начиная и заканчивая :).

Некоторые терминалы и другие приложения дают вам больше возможностей:

  • В Xterm курсор мигает , если cursorBlinkресурс установлен trueили -bcпараметр передается в командной строке. Частота мигания настраивается через cursorOnTimeи cursorOffTimeресурсы.
  • Некоторые другие эмуляторы терминала GUI могут мигать курсором; проверьте их диалоговое окно конфигурации.
  • (VGA) консоли Linux PC имеет ряд параметров курсора; их точное значение и применимость зависит от базовой реализации VGA (кадровый буфер Linux или видеокарта). Если ваш курсор по умолчанию мигает, попробуйте отключить аппаратный курсор и программный курсор с чем-то вроде printf '\033[17;127?c'(первый параметр 17 дает вам программный курсор без аппаратного курсора, а второй параметр, установленный на 127, делает его по существу обратным видео). Смотри выше относительно сброса терминала.
  • В Emacs , M-x blink-cursor-modeпереключает курсор мигает. Вставьте (blink-cursor-mode 0)свой, ~/.emacsчтобы выключить его. Это глобальная настройка, которая не применяется в текстовом терминале.

Смотрите также Juri Линьков (юрта) 's страница Нет Мигающий о том , как отключить мигание Lesstif, Tk, Gtk (Gnome), Qt (KDE), Firefox, и многое другое.

Жиль "ТАК - перестань быть злым"
источник
14

Я обнаружил, что это проще, если у вас есть права root:

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

Я поместил его в скрипт запуска машины, как /etc/rc.localдля Arch Linux.

duraid
источник
5

В Linux tty вы можете использовать escape-последовательность "\e[?48;0;64"или что угодно, но это не работает в tmux / vim. Tmux / Vim при запуске выдает команду cnorm, которая по умолчанию содержит "\e[?0c". Вы можете видеть, что это отменяет эффекты вышеуказанного параметра. Вы должны изменить cnorm на вышеуказанную последовательность, чтобы приложения TUI могли сбросить курсор в соответствии с вашими предпочтениями. Больше информации об этом от Жиля, но если вы ищете быстрое решение, попробуйте это:

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

Последняя команда сгенерирует новый файл terminfo, ~/.terminfoкоторый будет автоматически выбран при перезапуске tmux server / vim.

ypsu
источник
3

Ставить

\ 033 [17;? 0; 127c

к вашей переменной PS1, и вы перестанете мигать постоянно.

НАПРИМЕР:

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

MRU
источник
1
Это (по крайней мере, для меня) испортит разрывы клеммной линии (при переполнении линии). Используйте квадратные скобки, экранированные: например BLUEBOXNOBLINK="\033[?17;0;60c", затемPS1="\[$BLUEBOXNOBLINK\]\[$BROWN\]\u \[$CYAN\]\W: \[$NC\]"
Эмануэль Берг
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
Дэвид Сванберг
источник
Это замечательное решение, которое, вероятно, вызвало много голосов, если автор не забыл объяснить это ... :-)
Петер говорит, что восстановите Монику
1
-cursor offэто не совсем то, что требуется, это заставляет курсор исчезнуть ... setterm -blink offкажется более многообещающим, но это влияет на текст, а не на фактический курсор.
Мистер Спуратик
setterm -cursor off; setterm -cursor onздесь работает, но это недопустимый обходной путь
Thor
0

я кладу

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

в /etc/rc.local и создал для него сервис systemd, используя онлайн-инструкции. Однако я заметил, что иногда после загрузки курсор все еще мигает. Было бы неплохо узнать, как правильно отключить мигание курсора через sysfs в современной системе systemd, есть у кого-нибудь какие-нибудь советы? В некоторых дистрибутивах есть /etc/sysfs.conf, но я использую Arch и не нахожу этот файл в sysfsutils или где-либо еще.

В качестве временного исправления я выполнил следующую команду

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

Некоторые эксперименты показали, что «255c» в конце работает лучше, чем «127c», указанный выше, он создает белый, а не серый курсор.

Метаморфические
источник
0

Для консоли Linux:

Альтернатива 1

Добавьте -I "\033[?17;0;255c"опцию к gettyстрокам в вашем /etc/inittabфайле. Для этого:

  1. Открыть /etc/inittab файл в текстовом редакторе. Там должны быть строки, которые содержат gettyили agettyили аналогичные. Примером является:

    tty1::respawn:/sbin/getty 38400 tty1
    
  2. Добавлять -I "\033[?17;0;255c" к каждой gettyстроке. В качестве примера, после добавления -I "\033[?17;0;255c", то gettyвыше строка будет выглядеть следующим образом :

    tty1::respawn:/sbin/getty -I "\033[?17;0;255c" 38400 tty1
    
  3. Перезагрузите систему или, альтернативно, убейте все gettyпроцессы.

Альтернатива 2

Лучшая альтернатива - поставить ESC[?17;0;255c в /etc/issue, вместо того чтобы положить его gettyлиний. Это viделается следующим образом:

  1. Откройте /etc/issueс помощью vi.
  2. В любом месте /etc/issueфайла войдите в режим вставки.
  3. Пока вы находитесь в режиме вставки, нажмите ^V(то естьCtrlv ), затем нажмите Esc. Теперь должен быть вставлен escape-символ.
  4. Теперь вставьте оставшиеся символы, которые [?17;0;255c .

Альтернатива 3

Другой альтернативой является сохранение аппаратного курсора (вместо использования программного курсора) и прекращение мигания аппаратного курсора и превращение его в блочный курсор. Для этого:

  1. Добавьте следующее к /etc/inittab:

    # Stop cursor blink on Linux console
    ::sysinit:/bin/sh -c "echo 0 > /sys/class/graphics/fbcon/cursor_blink"
    
  2. Добавить ESC[?8cв /etc/issue. Обратитесь к «Альтернативе 2» за инструкциями по выполнению этого.

Однако с этой опцией курсор не становится ярко-белым. Я думаю, что это возможно только с помощью программного курсора.

Следуя любой из этих альтернатив, вы получите белый, не мигающий, блочный курсор.

Дальнейшая информация

Утка
источник
0

Это полностью скрывает курсор.

tput civis

Чтобы восстановить:

tput cnorm
NVRM
источник