Intereting Posts
Как найти, к чему относятся ссылки driver.mod.c? Как сделать мигающий текст в bash? Извлечение файлов в текущий каталог Где определить, какие локали генерировать в centos7? Как я могу использовать vim для удаления первых нескольких символов выбранных строк с помощью команд? Откройте MTU между мной и IP-адресом назначения Установленный размер логического тома, не соответствующий фактическому размеру тома Настроить постфикс для отправки и получения с локального хоста Правильная форма для запуска службы SystemD при загрузке / выключении Какие порты необходимы и, как правило, должны быть разрешены в системе Linux? Смотреть файл с использованием многопользовательского режима, даже если он не был создан Как суммировать значения столбцов для каждой строки в двух файлах csv с помощью сценария bash? awk для печати подчеркивания Установите FreeBSD с usb на usb (Root on ZFS) Centos 6.3 принудительно вводит пароль при нажатии кнопки nm-applet tray?

"-bash: warning: setlocale: LC_ALL: не может изменить локаль (en_US.UTF-8)"

Запуск нового Ubuntu 16.04 и сервера Debian 8. Попытка подключиться через ssh и получить следующий странный вывод терминала. Я имею в виду прямоугольники с номерами в нем.

Проблема с языковыми настройками была введена мной, пытаясь решить только что упомянутую проблему, так как я предполагал, что некоторые проблемы с кодированием несут ответственность. После 3-х отладки мне нужна ваша помощь!

Может быть, это просто недостающая библиотека? Это трудно искать такие графические проблемы …

введите описание изображения здесь

local@local:~$ ssh dummy@server The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sat Jul 9 17:22:43 2016 from x590c3909.dyn.telefonica.de -bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) -bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) -bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) ]1337;RemoteHost=dummy@server]1337;CurrentDir=/home/patrick]1337;ShellIntegrationVersion=2;shell=bash]133;C;]133;D;0]1337;RemoteHost=dummy@server]1337;CurrentDir=/home/patrick]133;Adummy@server:~$ ]133;B 

выход echo $ PS1:

 echo $PS1 ]133;C;\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ 

echo $ TERM output:

 echo $TERM ]133;C;xterm 

Изменить: «locale» – предупреждение, зафиксированное этим ответом .

Что делает ваш терминал

«Прямоугольники с номерами в [их]» – это то, как ваш эмулятор терминала отображает вам контрольную последовательность терминала, потому что он не распознает эту последовательность. В частности:

  • Существует управляющий символ ECMA-48 (в группе C1 для технического) с названием Операционная система Command , сокращенно OSC. Он имеет значение Unicode U + 009D.
  • ECMA-48 определяет механизм, в котором символы в группе C1, которые требуют полностью чистого 8-битного пути передачи для передачи, могут быть представлены управляющей последовательностью, которая использует только символы со значениями, меньшими, чем U + 0080 (128) , Эти 7-разрядные псевдонимы позволяют использовать управляющие символы C1 на путях передачи, которые не являются 8-битными. По иронии судьбы, мир был в значительной степени 8-битным чистым на протяжении десятилетий.

    Вы, скорее всего, знаете один из этих 7-разрядных псевдонимов, который очень распространен: ESC [ вместо управляющего символа CSI (U + 009B). Управляющий символ OSC имеет ESC ] как 7-разрядный псевдоним.

  • Что-то в дальнем конце вашего соединения SSH ожидает, что ваш терминал поймет контрольные последовательности, которые начинаются с OSC. Он передает их с использованием 7-разрядного псевдонима.
  • Ваш терминал не полностью выполняет ECMA-48. Он видит ESC ] и просто рассматривает его как символ ESC, за которым следует символ ] . И это то, что он печатает.
  • Но у этого символа ESC нет символа. Таким образом, он возвращается к традиционному трюку отображения символов, в котором у него нет глифа в качестве поля с шестнадцатеричным значением (младшие 16 бит) кода Unicode в нем. Если вы посмотрите внимательно, вы увидите цифры 00 и 1B в поле, для U + 001B, кодовую точку символа ESC.
  • Он также неправильно рассматривает «интервал» того, что он напечатал для ESC, т. Е. Пространство, которое он занимает на экране, что фактически составляет две ширины символов. Поэтому после печати коробки он не продвигает выходное положение достаточно . Затем он печатает ] над верхней частью правой половины окна, как вы можете видеть.

Почему это было сказано сделать это

Несколько терминальных эмуляторов распознают OSC как интродуктор последовательности символов управления. Для него стандартная форма. ECMA-48 § 5.6 определяет «управляющие строки», начатые с OSC, и заканчивается ST (U + 009C, String Terminator ). То, что находится в контрольной строке, специфично для терминального типа. Например: вы увидите из своего doco, что xterm реализует такие управляющие строки, для установки шрифтов и заголовков окон.

Однако форма управляющей последовательности в этом случае не является формой xterm. Скорее, это

  ␛] 1337; CurrentDir = / дом / patrick␇ 

Это форма для управляющих последовательностей OSC, которая понимается iTerm2. iTerm2 определяет набор управляющих последовательностей, введенных OSC, которые явно нестандартны и специфичны для iTerm2. Они не придерживаются спецификации контрольной строки ECMA-48, но прекращают контрольную строку с BEL (U + 0007), а не с ST, как говорится в стандарте. Строго говоря, это строка управления, которая никогда не прерывается , поскольку любые символы, отличные от SOS и ST, допускаются в содержимом строки управления; и тот, который с соответствующим эмулятором терминала эффективно останавливает отображение, поскольку терминал просто набирает все последующие выходные данные в качестве контрольной строки.

(Терминальный эмулятор, встроенный в ядро ​​Linux, также не реализует стандартные управляющие строки OSC. Xterm doco отмечает, что у него есть корты для поддержки сломанных приложений, которые используют эмулятор терминала с несоответствующим ядром Linux или iTerm2. Форма здесь определенно iTerm2, а не эмулятор ядра ядра Linux, хотя.)

Когда вы используете iTerm2 со своего Macintosh, все, что находится на другом конце SSH-соединения, тихо посылает управляющие последовательности iTerm2 на ваш эмулятор терминала, чтобы рассказать о нем, как о вашей оболочке, о том, что ваш рабочий каталог, кто вы, когда вы начинаете редактирование в командной строке, когда вы начинаете выполнение команды и т. д.

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

Фактически, вывод даже говорит вам об этом:

  ␛] одна тысяча триста тридцать семь; ShellIntegrationVersion = 2; оболочки = bash␇ 

Вы установили iTerm2 «Интеграция с оболочкой» для оболочки Bourne Again на вашей удаленной системе. Глядя на это, довольно сложно проверить, что iTerm2 на самом деле является терминалом, с которым он разговаривает.

Поэтому отключите / удалите его.

дальнейшее чтение

  • Функции управления кодированными наборами символов . ECMA-48. ECMA International.
  • console_codes . Личные страницы Linux. § 4. 2015 год.
  • Мэтью Фримен, Джордж Нахман и Джеймс А. Розен. Собственные коды Escape . Документация iTerm2.
  • Мэтью Фримен, Джордж Нахман и Джеймс А. Розен. Интеграция оболочек . Документация iTerm2.