Графическая система Linux
В Linux-системах пользователи работают через интерфейс командной строки (CLI) или графический интерфейс пользователя (GUI) . Настольные системы имеют графический пользовательский интерфейс, в котором командная строка доступна через окно эмулятора терминала или в отдельной виртуальной консоли. Большинство низкоуровневых компонентов Linux, используют исключительно командную строку. Командная строка особенно хорошо подходит для автоматизации повторяющихся или отложенных задач, а также предоставляет очень простой механизм межпроцессного взаимодействия. Программа графического эмулятора терминала часто используется для доступа к командной строке с рабочего стола Linux.
Дистрибутивы, специально разработанные для серверов, могут использовать командную строку в качестве единственного интерфейса.
X Window System
Оконная система, обеспечивающая стандартные инструменты и протоколы для построения графического интерфейса пользователя, а также базовые функции графической среды: отрисовку и перемещение окон на экране, взаимодействие с устройствами ввода (мышь, клавиатура). X Window System не определяет деталей интерфейса пользователя — этим занимаются менеджеры окон, которых разработано множество. По этой причине внешний вид программ в среде X Window System может очень сильно различаться в зависимости от возможностей и настроек конкретного оконного менеджера .
В X Window System предусмотрена сетевая прозрачность: графические приложения могут выполняться на другой машине в сети, а их интерфейс при этом будет передаваться по сети и отображаться на локальной машине пользователя.
Система X Window System была разработана в Массачусетском технологическом институте (MIT) в 1984 году. По состоянию на февраль 2016 года версия протокола — X11R7.7 — появилась в июне 2012 года. Проект X возглавляет фонд X.Org Foundation. Референсная (или образцовая) реализация (reference implementation) системы свободно доступна на условиях лицензии MIT и подобных ей лицензий.
X Window System часто называют X11 или просто X (в разговорной речи — «иксы́»).
Wayland
Протокол для организации графического сервера в Linux и других UNIX-подобных операционных системах
По мнению разработчиков, Wayland является «работой над ошибками» X.org, которые накопились за четверть века его развития. Кардинальное отличие от X.org заключается в том, что Wayland лишь управляет буферами (плоскостями) окон и возлагает всю отрисовку их содержимого на инструментальные пакеты (GTK, Qt и так далее). API рисования (drawing API) полностью отсутствует. Все версии протокола строго определены, а само версионирование продумано. У X.org есть серьёзная проблема с версиями разных расширений, часто перекрещивавшимися или дополняющими, вместо того чтобы быть самодостаточными и исключающими. Функцию композиции буферов осуществляет референтный композитный менеджер Weston, использующий как OpenGL ES, так и программную отрисовку. В состав Wayland также входит унифицированный протокол устройств ввода, предоставляющий одну виртуальную клавиатуру, одну виртуальную мышь и один tablet-интерфейс — разделяемые всеми приложениями. Wayland знает о состояниях устройств ввода и способен запоминать их: X.org не сохраняет состояния устройств (stateless-протокол), но может быть настроен через файлы конфигурации.
О Wayland его создатель отзывается так: «Wayland — новый графический сервер, который выполняет только крошечную часть функций Х, которые мы действительно используем, когда запускаем композитный рабочий стол. Wayland, по сути, — буферный менеджер (подобно DRI2 для X.org), обработчик входных данных. Весь рендеринг выполняется на клиентской стороне — так, как сегодня работает OpenGL, а задание режимов и другие аппаратные установки выполняются в ядре. Такой подход значительно упрощает организацию сервера».
Wayland использует уже существующие в ядре Linux технологии, такие как Kernel mode-setting (KMS), Direct Rendering Manager (DRM) и Graphics Execution Manager (GEM).
Клиент и сервер
В X Window System «сервер» — это локальный дисплей пользователя (дисплейный сервер), а «клиент» — программа, которая этот дисплей использует (она может выполняться на удалённом компьютере).
Графический интерфейс для bash, делаем работу в командной строке удобнее
Когда пишешь код в IntelliJ IDEA, привыкаешь что везде есть подсказки, везде где можно работает комплишен, всегда можно одним кликом перейти на декларацию метода или на его юсаджи. После этого интерфейс командной строки выглядит как-то бедно. Конечно, он очень хорошо продуман, сделан настолько удобным, насколько это возможно в текстовом UI, но в графическом UI возможностей намного больше. Представляю вам плагин для JetBrains IDE, позволяющий работать в командной строке cо всеми удобствами IDE.
Плагин Friendly Terminal позволяет печатать команду в редакторе IDE. Такой редактор удобнее чем текстовая командная строка, потому что в нём есть подсветка синтаксиса, продуманный комплишен, показ документации, работают привычные сочетания клавиш, можно перемещать курсор мышкой и т.д.
После запуска команды, пользователь переключается в текстовую консоль, где команда выполняется, так, как будто её запустили обычном терминале.
После завершения исполнения команды, пользователь возвращается в GUI интерфейс, где показан output команды и можно вводить следующую. Bash сессия в текстовой консоли висит в бэкграунде и ждёт пока не будет запущена следующая команда.
Output показывается средствами IDE, что позволяет сделать его интерактивным. Например, команда ls /opt/my-app/conf выведет список файлов в директории /opt/my-app/conf, и эти имена файлов будут кликабельны, при нажатии c Ctrl файлы открываются в редакторе IDE, так же, из контекстного меню доступны свойства файла, копирование полного пути, и т.д.
Поиск команды в истории происходит во всплывающем окне, что позволяет видеть сразу несколько вариантов, в отличие от стандартного текстового терминала, где показывается только один вариант и легко пропустить нужный нажимая Ctrl+R.
File Manager
Навигация по файловой системе с помощью команд cd и ls — не самая удобная вещь, поэтому в плагине есть встроенный файловый менеджер типа Total Commander. Можно нажать Ctrl+O и откроются 2 файловых панели. В них можно ходить по директориям, копировать файлы, удалять файлы и т.д. Если вы на удалённой машине, то можно скачать файл или загрузить с локальной машины.
SSH
Командная строка используется, в основном, для доступа к удаленным машинам через SSH, поэтому все фичи должны работать даже если терминал подключен к удалённой машине. Было бы мало толка если бы GUI работал только локально. Это накладывает некоторые ограничения на способ получения данных. Допустим, пользователь открыл историю команд, плагину надо как-то узнать что там за история команд на удалённой машине. На локальной всё просто — можно прочитать историю из файла «~/.bash_history» , а для связи с удалённой есть только bash сессия, которая висит в бэкграунде, пока пользователь находится в GUI панели. Через эту bash сессиию и происходит загрузка всех данных. Например можно получить историю команд запустив history и распарсив результат, для комплишена имён файлов и навигации по файловой системе в File Manager запускается ls . Чтобы технические команды не зафлудили историю, они начинаются с пробела. Bash не сохраняет команду в истории, если она начинается с пробела.
Я писал, что можно открывать файлы в редакторе IDE, это работает и через SSH. В этом случае, файл скачивается в temporary директорию. Если его изменить, изменения можно выгрузить обратно нажав «Upload changes». video
Представляю что об этом думают фанаты vim. Но на вкус и цвет товарищей нет, этот плагин для любителей IntelliJ IDEA.
Маленькие, но полезные фичи
- Ctrl+Shift+Space (smart completion) предлагает команды из истории, совпадающие по префиксу с тем что уже напечатано.
- Иногда хочется взглянуть на вывод последней команды отдельно от всего остального, для этого можно нажать Ctrl+Shift-O или соответствующую иконку в конце вывода, и он откроется во всплывающем окне на весь экран.
- Можно нажать Alt-Up , чтобы переместить курсор из строки ввода команды, в консоль, где печатается output команд, это позволяет что-нибудь скопировать без использования мыши. Дальнейшие нажатия Alt-Up / Alt-Down перемещают курсор к выводу следующей / предыдущей команды.
- Нажатие Alt+F12 открывает терминал, в каком-бы месте IDE вы не находились.
Ограничения
Friendly Terminal работает только с Linux консолью. В Windows может работать только в WSL (Windows Subsystem for Linux) или как SSH клиент для подключения к Linux машинам. Работать с CMD или PowerShell не может. Теоретически, можно сделать поддержку Cygwin, но пока не сделано.