]>

# Руководство по программе Konsole

Ларс
Деллё

    lars.doelle@on-line.de

Алексей
Титов
Перевод на русский

    alt@mark-itt.ru

06 Jun 1998
Версия 0.0.1

Настоящий документ относится к версии Konsole 0.8.6. Просим иметь в виду, что на данный момент это описание находится в процессе разработки.

KDE
documentation
konsole
translation
Russian
Alex
Titov
русский
первод
Алексей
Титов
документация

## Введение

Программа konsole представляет собой эмулятор терминала для системы KDE.

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

Рассмотрим вкратце историю развития "свободных" эмуляторов X-терминала. Две программы этого направления следует выделить особо: xterm, который является "родоначальником" и был написан даже раньше, чем X (на месяц или два), и xvt, "легковесный" клон xterm. Именно на них основано большинство из существующих сейчас эмуляторов (например, eterm). За последние десять лет konsole является первым эмулятором терминала, написанным, что называется, "с нуля". В то время как xterm, вне всякого сомнения, превзошел все разумные пределы доработок "хакерскими" методами (файл README из его комплекта начинается словами "Оставь надежду, всяк сюда входящий"), konsole реализует новый подход, основанный на современных технологиях и понимании принципов X Window.

## Обзор

Будучи запущенной, konsole, в свою очередь, стартует клиентское приложение (по умолчанию -- shell) и в дальнейшем отображает все выводимые этим приложением данные в своем окне. Нажатия клавиш и щелчки мышью в окне konsole передаются клиентскому приложению.

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

- Буфер строк

  Текст, вышедший за рамки экрана в результате его прокрутки, сохраняется в специальном буфере и доступен для последующего просмотра. Буфер может хранить до 100 строк текста. Его содержимое нельзя изменить, однако можно просматривать и копировать в область обмена (clipboard), частично или полностью.

- Клавиатура

  Сочетания клавиш Shift-PageUp, Shift-PageDown, Shift-Up и Shift-Down служат для прокрутки содержимого буфера. Все остальные нажатия передаются для обработки приложению, запущенному в окне konsole.

- Мышь

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

  - Левая кнопка

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

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

    Выделяемый фрагмент обозначается инверсией. После отпускания кнопки мыши помеченный текст копируется в область обмена для дальнейшего использования каким-либо приложением.

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

    Если в процессе выделения фрагмента курсор мыши вышел за верхнюю или нижнюю границу окна, konsole "прокрутит" текст соответственно вверх или вниз, показывая содержимое буфера строк. Прокрутка прекращается при остановке мыши.

    После того, как кнопка мыши отпущена, выделенный (скопированный в область обмена) текст остается высвеченным (инвертированным). Высветка помеченного фрагмента снимается, если было изменено содержимое области обмена или сам выделенный текст, либо повторным нажатием левой кнопки мыши.

    Для выделения текста в приложении, поддерживающем мышь, необходимо предварительно нажать и удерживать клавишу Shift.

  - Средняя кнопка

    Нажатие средней кнопки мыши копирует текст из области обмена в текущую позицию редактирования. Он будет обработан приложением, работающим в окне konsole так, как если бы этот текст был набран на клавиатуре.

  - Правая кнопка

    По нажатию правой кнопки мыши появляется меню настроек. Если в момент нажатия удерживалась одна из клавиш Shift или Control, будут показаны соответственно различные части меню.

- Сеансы

  Konsole позволяет запускать несколько сеансов (клиентских программ) одновременно. Новые сеансы открываются при помощи меню "New". Переключение между ними осуществляется через меню "Сеансы". Оба меню вызываются по нажатию правой кнопки мыши с клавишами Shift или Control соответственно.

  Меню сеансов можно настроить произвольным образом в соответствии с требованиями пользователя. Соответствующий раздел документации пока не готов. Несколько примеров настройки можно найти в каталоге /opt/kde/share/apps/konsole.

## Настройка

Большинство параметров внешнего вида konsole можно изменить при помощи меню "Настройки". Оно вызывается нажатием на соответствующий пункт в строке основного меню в верхней части экрана, либо нажатием правой кнопки мыши в окне konsole.

- Меню

  Если эта опция включена, в верхней части окна будет присутствовать панель основного меню. В отличие от многих других программ, меню konsole не реагирует на "горячие клавиши", позволяя тем самым клиентскому приложению самому обрабатывать все сочетания типа Alt+<клавиша>.

- Рамка

  Эта опция включает и выключает рамку вокруг области отображения клиентской программы.

- Полоса прокрутки

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

- Шрифт

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

- Размер окна

  Размер окна konsole, вообще говоря, можно выбирать произвольно. Однако, иногда бывает целесообразно устанавливать его в соответствии с требованиями приложений, "не знающих" о том, что окно терминала может быть разных размеров. В меню размера окна предусмотрены наиболее часто используемые значения. Если ни одно из них вам не подходит, "растяните" или "сожмите" окно по собственному желанию. При изменении размера konsole отображает его новое значение в заголовке, чтобы сделать настройку более удобной.

- Цветовая схема

  Эта опция позволяет выбрать цветовую схему. Соответствующий раздел документации отсутствует, несколько примеров можно найти в каталоге /opt/kde/share/apps/konsole.

По историческим соображениям клавиша Backspace не должна генерировать комбинацию Ctrl-H при работе в ОС Linux (единственное известное мне приложение, зависящее от соблюдения этого правила -- emacs, в котором по нажатию Ctrl-H вызывается система помощи). Несмотря на то, что любое приложение в принципе может быть соответствующим образом настроено, и даже в emacs можно назначить F1 клавишей подсказки, нестандартное использование клавиатурных кодов успело стать традицией. Не следует особенно об этом беспокоиться, просто убедитесь, что опция

- BS sends DEL

включена.

В этом случае при нажатии клавиши Backspace konsole посылает приложению код DEL (шестнадцатиричное значение 7f) вместо обычного кода BS (08). При этом клавиша Delete также генерирует некоторый символ, отличный от DEL.

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

- Записать настройки

## Установка

В настоящий момент konsole является частью пакета kdenonbeta. Компиляцию и установку konsole следует производить в соответствии с инструкцией в главном каталоге этого пакета.

Если у вас с этим возникли проблемы, пожалуйста, обратитесь к нижеследующему разделу Проблемы при установке.

## Обнаруженные ошибки и ЧЗВ (часто задаваемые вопросы)

Прежде чем отправлять отчет об обнаруженной ошибке, следует проверить, повторяется ли она на другом эмуляторе терминала, или же специфична для konsole.

### Проблемы при установке

Konsole требует наличия некоторых специальных шрифтов, которые входят в комплект поставки, но автоматически не устанавливаются, так как автор предпочитает не задействовать привилегий пользователя root в процессе установки. Вам придется сделать это вручную (см. файл README.linux.console).

### Некорректная работа приложений

Некоторые программы могут работать с ошибками, будучи запущенными в эмуляторе терминала под X.

#### MC (midnight commander 4.1.21)

- MC реагирует на изменение размеров окна (до того, как была нажата какая-либо клавиша) и на события мыши только тогда, когда установлен тип терминала "xterm". Однако, эти события не являются специфичными для xterm, например, их может также генерировать консоль Linux.

- После нажатия ˆO (переключение в альтернативный экран) Midnight Commander не передает событие по изменению размера своей вспомогательной оболочке. Вы можете проверить это на xterm или любом другом эмуляторе терминала.

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

- При изменении размеров окна в момент, когда на экране присутствуют панели MC, на экран выдаются как минимум символы перевода строки, но часто еще что-то, кроме них.

- Замечено, что при интенсивном обмене теряется часть текста. Поскольку мне удалось воспроизвести эту ошибку в эмуляторах kvt, rxvt и xterm, и я убедился, что данные теряются уже на уровне read(3), причину нужно искать где-то еще. Учитывая то, что этот эффект наблюдался только в MC, я полагаю, что он вызван особенностями реализации вспомогательной оболочки Midnight Commander.

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

#### Vim 4.6

- при завершении выдает на экран символ перевода строки, в результате на втором экране образуется странная картинка (в этом случае vim используется совместно с mc в качестве редактора по умолчанию).

#### dselect (интерфейс к менеджеру пакетов системы Debian):

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

### Ошибочные базы данных Termcap и Terminfo

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

Примеры:

- В дистрибутиве debian 1.3.1 (Bo) отсутствует код kdch1, в результате чего клавиша DELETE не работает надлежащим образом. Другие клавиши могут также не работать.

- пакет mc 4.1.21 содержит файл xterm.ti с ошибочными кодами hpa и vpa (не хватает последовательности `[` после `ESC`). Более того, xterm при этом работает, благодаря своему свойству принимать в некоторых случаях ошибочные последовательности (`ESC Pn C` рассматривается как `ESC [ Pn C`, где `C` -- не цифра.).

- По этой причине я дополнительно прилагаю xterm.ti (компилируется командой tic).

### Проблемы с BACKSPACE, DELETE and Likely Keyboard Issues.

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

Konsole генерирует DEL (0x7f) для клавиши BS и ESC&lsqb;3 для клавиши DEL, если включена опция 'Забой посылает DEL'. В этом случае konsole ведет себя как обычная консоль Linux. Ctrl-H (0x08) освобождается для нужд прикладных программ, например, для вызова системы помощи в emacs.

Когда эта опция отключена, при нажатии BS посылается код BS (0x08), а DEL генерирует DEL (0x7f), что аналогично VT100 и IBM PC.

(Поскольку любая программа может быть настроена для работы в режиме, когда BS=BS и DEL=DEL, а убогие терминалы без клавиши Delete существуют сегодня только в легендах, автор не понимает, зачем до сих пор используется этот трюк с BS).

ctrl-ˆ == ctrl- == ctrl-` == RS == 0x1e не могут быть набраны при включенной европейской раскладке клавиатуры, поскольку все три базовых символа являются префиксами (то есть, за ними должен следовать еще один символ). Как известно, в X11 эти клавиши "мертвые".

### Цветовые схемы

Принимая во внимание жалобы пользователей по поводу цветовой схемы, в последних версиях konsole позволяет настраивать цвета. Соответствующая документация в настоящий момент отсутствует.

### Шрифты

(Слегка устарело, см. README.linux.console)

- шрифт VGA использует другую кодировку, нежели остальные шрифты, поэтому с его помощью нельзя отобразить графические и национальные символы при эмуляции xterm. Этот шрифт лучше всего подходит для dos(1). Он также работает при эмуляции консоли Linux. Заметим, что включение этого шрифта в пакет является экспериментальным.

- Другие шрифты, кроме включенных в пакет, не годятся для использования в терминальных приложениях, не столько из-за их переменной ширины (которую я реализовал в качестве эксперимента), сколько из-за отсутствия в них графических символов. Вы можете проверить это при помощи утилиты xfd(1).

- Вообще, по всей видимости, не существует подходящего семейства шрифтов для терминалов. Если вы знаете какой-либо масштабируемый терминальный шрифт, пожалуйста, сообщите мне.

### Безопасность

Несмотря на то, что konsole предусматривает установку suid root, т.е. получение привилегий суперпользователя, она не рассчитана на такое использование, и делать этого не следует. Сразу же после запуска программа снимает с себя эти привилегии. Защищенный протокол клавиатуры (X11) не реализован. Это означает, что другие приложения X11 могут перехватывать нажатия клавиш в konsole. Опасайтесь "троянских коней".

Konsole не вызывает fchown(2) для своего псевдо-терминала. Это приводит к тому, что в многопользовательской системе ваш сеанс может быть "подсмотрен" кем-либо еще. При работе с новыми ядрами Linux (2.1/2.2) konsole будет пресекать эту возможность. Чтобы проверить, выполняется ли это правило, в окне konsole проделайте следующее:

        $ tty
        /dev/ttyp3

Затем, с правами обычного пользователя (не root), дайте команду:

`$ echo 'test' > /dev/ttyp3`

Если строка 'test' появится в окне konsole, это означает, что сеанс незащищенный.

Для других UNIX-подобных систем эта проблема очень скоро будет решена, однако, это потребует установки konsole как suid root. Хотя автор отдает себе отчет в том, что такой выход не всегда приемлем, решения этой проблемы он предложить не может.

### Обнаруженные ошибки (для версии konsole-0.8.6)

- Нажатие клавиш на дополнительной клавиатуре не вызывает никакого эффекта в случае, когда выключен Numlock. Это связано с тем, что библиотека Qt по какой-то причине передает все нажатия на эти клавиши как &num;ffff. Думаю, это происходит из-за фильтра eventFilter, который мне пришлось установить для получения событий от клавиатуры.

- Смотрите также файл TODO, где приведен список нереализованных пока возможностей программы (некоторые из них могут выглядеть как ошибки).

### Возможности, которые не планируется реализовывать в будущем.

- записи в utmp.

  utmp - это база данных, в которой содержится информация о пользователях, находящихся в данный момент в системе. Эта база используется такими программами, как who, finger, wall, talk и т.д. для получения списка пользователей и установки связи с ними.

  Для сеанса X использование utmp теряет смысл, так как в этом случае уникального терминала, на который можно было бы отправлять сообщения, не существует.

  Правильным решением было бы занесение записей в utmp менеджером сеансов (xdm/kdm). Кроме того, при запуске сеанса X должна автоматически запускаться специальная программа для приема сообщений и установки двусторонней связи (ktalk?), чтобы пользователь, работающий на текстовом терминале (консоли), мог устанавливать связь с пользователем, работающим в X.