Работа с буфером обмена в Linux: теория и практика
Совсем немного теории
Исторически сложилось так, что в X Window System (X11, — оконная система для Linux, UNIX) существует два буфера обмена.
Один из них (clipboard) похож на буфер обмена в Windows — при нажатии на Ctrl+Insert или Ctrl+C выделенный фрагмент (текст, картинка, файл) копируется в буфер обмена, а при нажатии на Shift+Insert (или Ctrl+V) — вставляется из него. Следует заметить, что во многих программах эти сочетания зарезервированы для иных целей и приходится пользоваться другими — например, в терминале сочетание Ctrl+C используется для завершения процесса, а для работы с буфером обмена используются сочетания Ctrl+Shift+C для копирования и Ctrl+Shift+V для вставки.
Второй буфер (primary) является специфичным для оконной системы X11. Выделенный текст незамедлительно попадает в буфер primary, и для того, чтобы вставить скопированный текст, достаточно лишь нажать среднюю кнопку мышки (колёсико). У кого в наличии не имеется трёхкнопочной мышки, а так же владельцам ноутбуков с тачпадами следует одновременно нажать левую и правую кнопки мышки для вставки текста.
Обычно эти буферы не связаны друг с другом (некоторые программы некорректно их обрабатывают и считают, что это один и тот же буфер обмена). Следовательно, хранящиеся в них данные не влияют друг на друга, что, несомненно, крайне удобно. Следует заметить, что при закрытии программы, из которой были скопированы данные, содержимое буфера обмена теряется.
Практика
Для решения проблемы утери данных из буфера обмена при закрытии программы существует сторонний софт. Например, Clipboard Daemon. Этот маленький демон держит содержимое буфера обмена в памяти независимо от того, было ли закрыто приложение, из которого скопированы данные.
Существует так же весьма и весьма полезная в умелых руках утилита под названием xclip, предназначенная для работы с буферами обмена из командной строки. Копирование и вставка текста осуществляется простыми командами, что позволяет использовать её в различного рода вспомогательных скриптах, примеры которых я продемонстрирую ниже.
К сожалению, официальная версия xclip у меня с кириллицей корректно не заработала, несмотря на то, что я собирал последнюю версию. Поэтому я предлагаю скачать и собрать версию xclip для дистрибутива Alt Linux.
Скрипты
Он открывает новую вкладку в Firefox с адресом, который находится в буфере обмена (очень часто нужно открыть ссылку в виде простого текста — например, если ссылка встретилась в текстовом редакторе — приходится её копировать, открывать вкладку в браузере и вставлять скопированный адрес. Скрипт делает всё за вас ;). Я назначил его на сочетание Win+F.
Благодаря тому, что буфер обмена является универсальной для ОС сущностью, эти скрипты будет работать везде — от терминала и текстового редактора до самого Firefox’а (впрочем, желающие могут настроить этот же скрипт и для альтернативных браузеров. Назначить скриптам сочетание кнопок можно как с помощью вашего windows manager’а (например, gconf-editor для Gnome), так и с помощью сторонних программ, таких как xmodmap или actkbd.
Что дальше?
Да что угодно =) Можно переводить фразы, выделенные мышкой, можно копировать их в программу для заметок — всё зависит от вашей фантазии и потребностей. Конечно, для таких вещей могут существовать отдельные программы, но такие вот самописные скрипты, на мой взгляд, для любого пользователя окажутся удобнее всего — linux тем и хорош, что можно всё, абсолютно всё настроить под себя и для себя.
Update: добавлена ссылка на менеджер буфера обмена Parcellite — спасибо хабрапользователю drujebober
Update 2: по просьбе хабраюзера dimaka добавил скрипты для перевода:
_________
Текст подготовлен в редакторе VIM
Как в терминале Linux копировать любой текст в буфер обмена
В данной статье разберем утилиту xclip, которая позволяет скопировать вывод любой команды или текст любого файла в буфер обмена в терминале Linux.
Давайте её установим в Ubuntu:
Данной утилитой можно скопировать любой вывод команды или текст какого-либо файла, чтобы скопировать туда, куда нам нужно. Также сама утилита позволяет вставлять из буфера обмена в консоль.
Примеры использования xclip.
Давайте рассмотрим работу xclip на примерах.
Допустим, есть у нас публичный ключ ssh, который мы хотим скопировать и вставить в систему для доступа к ней без ввода пароля:
Не совсем удобно копировать данный текст в терминале, можно ошибиться в пробелах и тд. Поэтому, давайте воспользуемся xclip.
Чтобы скопировать в буфер обмена, перенаправляем вывод любой команды в xlip:
или короткая версия:
Если вы не знаете, что такое |, то это означает, что мы вывод первой команды перенаправляем на вход второй после |.
Для тех, кто хочет узнать про перенаправление потоков вывода, советую прочитать мою статью: Терминал Linux. Как сохранить в файл вывод терминала..
Теперь мы можем вставить скопированный текст куда захотим, к примеру, на сайте github:
или короткая версия:
или короткая версия:
Давайте создадим постоянные алиасы для команды копирования и вставки:
Вставляем туда строки:
Если вы не знаете, что такое алиасы, то советую прочитать следующую статью: Терминал Linux. Создание alias (псевдонима) в Ubuntu..
Сохраняем файлик, и если переоткрыть терминал (открыть новую сессию терминала), то теперь можно использовать наши новые команды. Теперь, чтобы скопировать публичный ключ ssh, нам достаточно ввести следующую команду:
Псевдонимы pbcopy и pbpaste я использую, потому что я часто пользуюсь системой macosx и там есть команды с такими названиями. Вы можете назвать алиасы по вашему желанию.
Ну и вставить текст в терминале:
Ну и напоследок, хотелось продемонстрировать как еще можно пользоваться данной утилитой. К примеру, есть у нас файл лога, и мы хотим просмотреть его последние 10 строк:
И мы хотим скопировать его, чтобы кому-то отправить его, просто укажем нашу утилиту:
Как скопировать содержимое файла в буфер обмена linux
В данной статье разберем утилиту xclip, которая позволяет скопировать вывод любой команды или текст любого файла в буфер обмена в терминале Linux.
Давайте её установим в Ubuntu:
Данной утилитой можно скопировать любой вывод команды или текст какого-либо файла, чтобы скопировать туда, куда нам нужно. Также сама утилита позволяет вставлять из буфера обмена в консоль.
Примеры использования xclip.
Давайте рассмотрим работу xclip на примерах.
Допустим, есть у нас публичный ключ ssh, который мы хотим скопировать и вставить в систему для доступа к ней без ввода пароля:
Не совсем удобно копировать данный текст в терминале, можно ошибиться в пробелах и тд. Поэтому, давайте воспользуемся xclip.
Чтобы скопировать в буфер обмена, перенаправляем вывод любой команды в xlip:
или короткая версия:
Если вы не знаете, что такое |, то это означает, что мы вывод первой команды перенаправляем на вход второй после |.
Для тех, кто хочет узнать про перенаправление потоков вывода, советую прочитать мою статью: Терминал Linux. Как сохранить в файл вывод терминала..
Теперь мы можем вставить скопированный текст куда захотим, к примеру, на сайте github:
или короткая версия:
или короткая версия:
Давайте создадим постоянные алиасы для команды копирования и вставки:
Вставляем туда строки:
Если вы не знаете, что такое алиасы, то советую прочитать следующую статью: Терминал Linux. Создание alias (псевдонима) в Ubuntu..
Сохраняем файлик, и если переоткрыть терминал (открыть новую сессию терминала), то теперь можно использовать наши новые команды. Теперь, чтобы скопировать публичный ключ ssh, нам достаточно ввести следующую команду:
Псевдонимы pbcopy и pbpaste я использую, потому что я часто пользуюсь системой macosx и там есть команды с такими названиями. Вы можете назвать алиасы по вашему желанию.
Ну и вставить текст в терминале:
Ну и напоследок, хотелось продемонстрировать как еще можно пользоваться данной утилитой. К примеру, есть у нас файл лога, и мы хотим просмотреть его последние 10 строк:
И мы хотим скопировать его, чтобы кому-то отправить его, просто укажем нашу утилиту:
_ БУФЕР ОБМЕНА _ В LINUX
БУФЕР ОБМЕНА В LINUX
Часто можно услышать вопросы пользователей альтернативных операционных систем: а буфер обмена в Linux есть? Конечно, есть. Даже два! И для них есть менеджеры буфера обмена : намного удобней иметь возможность вставить из буфера кусок кода, который часто используется, чем по сто раз его копировать из другого текста. Вот о них в этом посте и поговорим.
Буферы обмена в Linux.
Менеджеры буферов обмена в Linux.
Для комфортной работы с буфером обмена в Linux есть много программ, как консольных, так и графических, что облегчает управление данными в буферах обмена. Эти программы позволяют хранить историю содержимого буферов обмена, что позволяет вернуться к любому из предыдущих состояний.
Буфер обмена в графической среде.
Среди программ для управления содержимым буфера обмена можно выделить две :
Parcellite — менеджер буфера обмена на GTK для среды GNOMEklipper — менеджер буфера обмена для среды KDE. Несколько слов о Parcellite и Klipper далее.
Менеджер буфера обмена Parcellite.
Установка parcellite проста:
aptitude install parcellite
занимает очень мало места (меньше мегабайта). После запуска командой parcellite в трее появится иконка:Всё очень просто и скромно: нажав на правой кнопкой мыши по значку в трее, можно настроить параметры, а нажав левой – редатировать или очистить содержимое буфера обмена (показано полупрозрачным).
Настраиваемых параметров вполне достаточно: так, например, можно задать число хранимых состояний буфера обмена (25 в данном примере) или хранение только гиперссылок.Parcellite так же поддерживает задание регулярных выражений (regular expressions) – это вкладка Actions:
В общем, вполне функциональный и простой в использовании менеджер буфера обмена в Linux, который понравится не только гномоводам.
Менеджер буфера обмена Klipper.
Klipper устанавливается просто:
aptitude install klipper
пакет занимает чуть менее 1Мб, так что не жадничаем и ставим. Работать будет не только в KDE, но и в IceWM, на радость многим лихачам, оный использующим.
После запуска в трее появляется значок Klipper, нажатие на который выдаёт меню с настройками:А настроек тут хватает:Перечислю только основные:
Save clipboard contents on exit — сохраняем содержимое буфера обмена Linux при выходе из Klipper.Remove whitespace when executing actions — удалять пробелы перед или после содержимого буфера обмена, что полезно, если вы ввели URL в буфер обмена с пробелами.Clipboard selection behavior — игнорировать выделение, то есть не смешивать буфер обмена clipboard и primary.
Ну и конечно, можно настроить размер истории буфера обмена (Clipboard history size). Можно так же задавать регулярные выражения (regular expressions) и связывать их с Klipper:Относительно Actions, настройка которых показана выше: вообще весьма удобная фукнция. Вот, например, вы выделяете в текстовом редакторе кусочек текста, который является веб-ссылкой. Если включены Actions в Klipper, то вылезет симпатичное всплывающее окошко, которое может сразу вставить эту ссылку в ваш любимый браузер. На скриншоте подсвечен процесс работы Actions:
Ну и настроить горячие клавиши на всё, что только можно:
Заключение.
Лучшие менеджеры буфера обмена Linux
При работе с большим количеством текста, будь то исходный код программы или курсовая работа, непременно приходится использовать функцию копирования. Например, вы можете использовать несколько шаблонов функций. Но для того, чтобы быстро и легко менять сохранённый фрагмент в буфере обмена, может пригодится менеджер.
Для Linux существует не так много менеджеров буфера обмена. Но вы можете без труда подобрать решения практически для любой популярной среды рабочего стола. Есть как отдельные программы, так и интегрированные в оболочку утилиты или же подключаемые расширения для неё.
Лучшие менеджеры буфера обмена Linux
1. CopyQ
Стоит начать с самого продвинутого менеджера буфера обмена для Linux. CopyQ имеет большое количество настроек. Настраивается практически каждый элемент, есть функция шифрования.
Тексты сохраняются с форматированием. Однако, наблюдаются некоторые неточности при вставке фрагментов. Часть форматирования теряется. Изображения сохраняются, HTML код тоже, но опять же, часть элементов отображается не так, как при прямом копировании. Есть удобный просмотр истории (пункт меню «Показать/скрыть»). В нём можно увидеть фрагменты с форматированием и при необходимости закрепить их в истории. Вам разрешено даже менять скопированные тексты. Там же есть поиск для быстрого доступа к нужному фрагменту.
CopyQ будет работать в оболочке GNOME, KDE, Mate, XFCE. С Cinnamon возникли проблемы, утилиты в этом окружении в трей не попадают, а ведь именно оттуда и предоставляется доступ не только к скопированным фрагментам, но и к настройкам программы.
sudo apt install copyq
2. Diodon
Для установки Diodon используйте команду:
sudo apt install diodon
3. Clipman (XFCE)
Для оболочки XFCE вы можете установить менеджер буфера обмена Clipman. Текст сохраняется без форматирования. Есть возможность сохранять изображения.
У менеджера наблюдается серьёзная ошибка. Вместо того, чтобы показать полную историю, открывается меню настроек. Надеемся, что в скором времени этот недостаток будет устранён.
Для установки Clipman воспользуйтесь командой:
sudo apt install xfce4-clipman
4. Clipboard Indicator (GNOME)
Для оболочки GNOME существует расширение Clipboard Indicator. Плюсом является простая интеграция в оболочку. Установку можно провести вручную, но проще всего воспользоваться расширением для браузера и активировать менеджер в один клик. Имеется возможность проводить поиск. Текст сохраняется без форматирования, сохранение изображений не поддерживается.
5. Встроенный менеджер KDE
В оболочку KDE встроен простой менеджер буфера обмена. Он автоматически появляется в трее при копировании текста и вмещает большое количество фрагментов. Вдобавок к этому есть поиск. В остальном функциональность довольно скромная. Текст сохраняется без форматирования. Сохранение изображений не поддерживается.
Выводы
Наиболее универсальным менеджером буфера обмена будет CopyQ. Он заработает на большинстве оболочек, при этом предоставит большой набор функций, превосходящий возможности других программ. Также вас может заинтересовать расширение для GNOME.
Если же на вашей оболочке менеджеры не заработали, то в качестве альтернативы воспользуйтесь расширениями для браузера и других часто используемых программ. Например, для VS Code есть соответствующий плагин.
А пользуетесь ли вы менеджером буфера обмена? Какие лучшие менеджеры буфера обмена Linux вы знаете? Расскажите об том в комментариях.