1/10/2011

Буфер обмена в Linux

Часто можно услышать вопросы пользователей альтернативных операционных систем: а буфер обмена в Linux есть? Конечно, есть. Даже два! И для них есть менеджеры буфера обмена: намного удобней иметь возможность вставить из буфера кусок кода, который часто используется, чем по сто раз его копировать из другого текста. Вот о них в этом посте и поговорим.


Буферы обмена в Linux
Итак, в Linux буфер обмена есть, и даже не один. В графической оболочке X.org их целых два.

Первый буфер обмена (clipboard) работает так же, как и буфер обмена в Windows: выделяем картинку или текст и нажимаем Ctrl+Insert или Ctrl+C для копирования в буфер обмена. Вставка происходит после нажатия комбинации Shift+Insert или Ctrl+V.

Второй буфер обмена (primary) в Linux работает иначе. Если вы выделяете текст мышью, выделенный текст сразу попадает в буфер primary. Чтобы вставить скопированный текст, достаточно нажать среднюю кнопку мышки (колёсико). Если трёхкнопочной мыши у вас нет или вы работаете на ноутбуке с тачпадом, для вставки текста можно одновременно нажать левую и правую кнопки мыши.

Эти буферы обмена не связаны друг с другом, и хранящиеся в них данные не влияют друг на друга. Однако если вы скопируете другой кусок текста или картинку, новое содержимое затрёт собой предыдущее, и вы потеряете данные в буфере обмена.


Менеджеры буферов обмена в Linux

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

Буфер обмена в консоли
Даже если вы работаете в Linux в голой консоли, буфер обмена у вас всё равно будет. Достаточно установить пакет gpm (general purpose mouse) и вы сможете копировать и вставлять текст выделением и колёсиком мыши.

Для управления содержимым буфера обмена есть консольная программа xclip. Копирование и вставка текста в xclip выполняется простыми командами, что позволяет использовать её в скриптах, примеры которых можно посмотреть в этом посте.
При возникновении проблем с копированием файлов в KDE, вместо xclip можно использовать xsel.

Буфер обмена в графической среде
Среди программ для управления содержимым буфера обмена можно выделить две:
  • Parcellite -- менеджер буфера обмена на GTK для среды GNOME
  • klipper -- менеджер буфера обмена для среды KDE
Несколько слов о Parcellite и Klipper далее.


Менеджер буфера обмена Parcellite
На смену уже не подающему признаки жизни glipper приходит parcellite, который довольно активно развивается, может работать как демон и поддерживает действия с буфером обмена. Надо отметить, что Parcellite замечательно работает и в IceWM.

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

Настраиваемых параметров вполне достаточно: так, например, можно задать число хранимых состояний буфера обмена (25 в данном примере) или хранение только гиперссылок.
Parcellite так же поддерживает задание регулярных выражений (regular expressions) - это вкладка Actions:

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



Менеджер буфера обмена Klipper
Для среды KDE есть свой менеджер буфера обмена, который называется 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, но для начала стоит посмотреть на xclip, xsel, klipper и parcellite. Для среды XFce есть плагин под названием Clipman. Утилиты буфера обмена существенно облегчают жизнь при работе с буфером обмена. И теперь вы уж точно ничего не потеряете!

27 комментариев:

  1. Спасибо за обзор. Часто натыкаешься на вещи в kde, с первого взгляда ненужные, а потому и сразу отключаемые, но после понимания как и зачем они работают внезапно осознаёшь их нужность.

    ОтветитьУдалить
  2. Я пользуюсь https://launchpad.net/glippy

    ОтветитьУдалить
  3. Попробовал, glippy вроде бы неплох, но выдает 21 ошибку ([Error] Key ... not found in GConf) при запуске во fluxbox, так что он пока не замена/конкурент Parcellite. IMHO

    ОтветитьУдалить
  4. ... и clipit - форк parcellite.

    ОтветитьУдалить
  5. Ну, по правде говоря, буферов обмена в X не 2, а 3, причём третий поддерживает несколько "карманов".

    Правда, беда в том, что этот самый третий почти ни одна современная программа не поддерживает.

    И ещё, в консоли иногда бывает нужно нажать ctrl+shift+V для вставки. Почему-то shift+insert и ctrl+V не всегда работают, или вставляют не тот текст.

    ОтветитьУдалить
  6. @alltiptop комментирует...
    Спасибо за обзор.
    Пожалуйста. Я просто недавно правил свои посты, и потерял в буфере обмена небольшой, но хороший кусок текста. Поматюгавшись, со зла пнул аптитуду - есть, говорю, у тебя, подлюга, менеджеры буфера обмена? :-)

    Часто натыкаешься на вещи в kde, с первого взгляда ненужные, а потому и сразу отключаемые
    Вот-вот, и Klipper из той же серии.

    @Анонимный комментирует...
    Я пользуюсь https://launchpad.net/glippy
    Сыроватое оно. Но спасибо за ссылку.

    @despicere комментирует...
    Попробовал, glippy вроде бы неплох, но выдает 21 ошибку
    У меня оно не запустилось вообще.

    @green18281828 комментирует...
    и clipit - форк parcellite.
    Который форк Glipper :-)

    @TiGR комментирует...
    Ну, по правде говоря, буферов обмена в X не 2, а 3, причём третий поддерживает несколько "карманов". Правда, беда в том, что этот самый третий почти ни одна современная программа не поддерживает.
    По этой причине я и не упомянул его в обзоре. Так оно не поддерживается, стало быть, простому смертному дебианщику недоступно.

    И да, комменаторам спасибо за интересные ссылки.

    ОтветитьУдалить
  7. Колесиком копирую/вставляю обычно только текст, а вот с помощью Ctrl+C провожу операции с файлами. И это очень удобно! Спс.

    ОтветитьУдалить
  8. Можно подробнее про регулярные выражения parcellite? Что-то никогда не пользовался и толком не разбирался зачем оно в буфере.

    ОтветитьУдалить
  9. В KDE вместо xclip лучше использовать xsel: первый по какой-то причине отказывается сотрудничать с копированием файлов в KDE :)

    ОтветитьУдалить
  10. @keedhost комментирует...
    Колесиком копирую/вставляю обычно только текст, а вот с помощью Ctrl+C провожу операции с файлами
    Хмм... а это как? В Konqueror? Так у меня-то его нет Только mc.

    @paulus комментирует...
    Можно подробнее про регулярные выражения parcellite?
    Насколько я понял, это просто выполнение действий над скопированным куском текста. Например, если скопирован веб-адрес - убрать пробелы. Мне лично это фича тоже не нужна, но вроде не мешает :-)

    @о_О Тынц комментирует...
    В KDE вместо xclip лучше использовать xsel: первый по какой-то причине отказывается сотрудничать с копированием файлов в KDE
    Добавил. Спасибо.

    И да, граммарнаци в тред! :-)

    ОтветитьУдалить
  11. @green18281828
    clipit - хоть и форк, но 1.3.11 совершенно не рабочий, вешает флуксбок намертво только в терминал и можно перейти для убийства, лишь тогда Х-ы оживают... так что parcellite побеждает снова.

    ОтветитьУдалить
  12. Это же только исковые буферы обмена, есть ведь ещё консольный, не?.. Из-за него неудобно копировать текст из какого-нибудь mc в графические приложения.

    ОтветитьУдалить
  13. @paulus комментирует...
    clipit - хоть и форк, но 1.3.11 совершенно не рабочий, вешает флуксбок намертво
    Может, это только под флюксбоксом? Мне просто проверить негде :-)
    Кстати, и Parcellite, и Kipper, под IceWM работают прекрасно. Добавил Klipper в автозапуск :-)

    @Softwayer комментирует...
    Это же только исковые буферы обмена, есть ведь ещё консольный
    Фишка в том, что эти менеджеры буфера обмена могут перехватывать в том числе и тот буфер, который работает по выделению.

    Из-за него неудобно копировать текст из какого-нибудь mc в графические приложения.
    Если мне не изменяет память, то это gpm. Именно он позволяет сделать выделение по средней кнопке в консоли. Можно его деинсталлировать, в принципе.

    ОтветитьУдалить
  14. Я у себя в KDE очень хотел использовать именно xclip, поэтому погуглил, разобрался в проблеме и занёс себе в .bashrc вот такую вот строку:

    alias kclip='xclip -selection XA_CLIPBOARD'

    ОтветитьУдалить
  15. Я лично изучал Линукс и мне он не понравился по причине сложности самой системи что сама собой не оправдана. Чем визвана такая популярность линукса - безопасностю систем или же меньшим потреблением ресурсов (80% от виндовс-систем) , или все же какою то анархичной сутностю каждого кто ее использует чем хочет виделятся!??

    ОтветитьУдалить
  16. Я лично изучал Линукс и мне он не понравился по причине сложности самой системи что сама собой не оправдана. Чем визвана такая популярность линукса - безопасностю систем или же меньшим потреблением ресурсов (80% от виндовс-систем) , или все же какою то анархичной сутностю каждого кто ее использует чем хочет виделятся!??

    Для меня - это, наверное, возможность выбора. В Linux можно практически все выбрать на свой вкус: дистрибутив, программы; легкость управления и оптимизации. Рекомендуется тем, у кого этот вкус есть, кто хочет систему, "подстроенную под себя", а не навязанную кем-то.

    ОтветитьУдалить
  17. @Анонимный комментирует...
    Я лично изучал Линукс и мне он не понравился по причине сложности самой системи
    Анонимус, она не сложная, она другая. Но к сожалению, мало кто пишет об организации самой системы, её логичности и продуманности. У меня до сих пор варится в черновиках этот пост про UNIX-way, в котором мне хотелось бы очень кратко это описать. Не просто файловую систему, в какие конфиги что вписывать, какие команды вводить - это всё составляет единый подход к работе. То, что называется mindset. Либо он тебе нравится, либо нет.

    Чем визвана такая популярность линукса
    Тем, что Линукс, в отличие от винды и мака, можно заточить под свои нужды до любой степени. Ничего схожего в мире UNIX сейчас нет: Linux и на смартфонах, и на нетбуках, и на десктопах, и на серверах, и на суперкомпьютерах. Он один и тот же: тебе не придётся переучиваться с Виндоус XP на Виндоус Сервер, который совсем другой.

    безопасностю систем
    И этим тоже. В юниксах система разделения прав и привилегий, может несколько архаичная сейчас, но она чёрт побери работает! В отличие расфуфыренной винды, где декларируется лучшая система прав, но покажи мне, кто этим пользуется на десктопах!? Хуже: многие линуксовые программы написаны так, чтобы не запускаться из-под рута, в то время как виндовые только из-под рута и идут.

    меньшим потреблением ресурсов
    Я бы сказал, более эффективным. Не веришь - я могу записать фильм со своего ноутбука. На нём университетская винда и мой Дебиан. Когда ты загружаешься в дебиан, всё летает со свистом, всё настроено под меня, и я могу запускать несколько числодробильных программ одновременно, кинув их в фон и продолжая писать тексты. Ничего такого в винде нет: более того, я просто не могу поверить в то, что под виндой это такое неповоротливое чудище. Да, ИТшники напихали туда всякого (антивирусы, обновлялки, антишпионы), но мне от этого не легче.

    все же какою то анархичной сутностю каждого кто ее использует чем хочет виделятся!??
    Некоторое количество пионэров, конечно, присутствует, но едва ли корпорации Оракл, Гугл, IBM, Редхат или Новел в просто хотят повыпендриваться, правда? :-)
    Многих привлекает Unix-way, о котором в виде шутки уже писалось. Это единый подход к работе, который не меняется от версии к версии. Для многих это то, что ни искали.

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

    ОтветитьУдалить
  18. >Обожди немного, Анонимус, я соберусь с силами и выдам таки >тот пост про юниксвей. Букв там много, но они стоят того, >чтобы их осилить.

    С удовольствием почитаю (не Аннонимус)

    ОтветитьУдалить
  19. Михаил. Обратите свое внимание и на Clipman. Легко настраивается и мелкий. Ноут с тестируемым Дебианом (XFce)

    ОтветитьУдалить
  20. *оффтоп* Конфиг коньков не выложите? На нетбуке будет в самый раз, я думаю.

    ОтветитьУдалить
  21. @le_cha_sever комментирует...
    >>>тот пост про юниксвей. Букв там много, но они стоят того, >чтобы их осилить.

    C удовольствием почитаю (не Аннонимус)


    Тот пост про юниксвей меня уже, если честно, достал :-) Я его переделываю уже в который раз, достигая очередного просветления. И отложил снова на конец года :-) Но может допилю и выложу раньше.

    @Snake комментирует...
    Михаил. Обратите свое внимание и на Clipman.
    Обратил. Добавил в пост. Но это таки плагин для XFCe а не самостоятельное приложение.

    @Александр комментирует...
    Конфиг коньков не выложите?
    А он уже давно выложен. В конце поста конфиг и есть. Он здесь такой же почти. Но если надо 1:1, на выходных дотянусь до нетбука и выложу на какой-нибудь пастебин.

    ОтветитьУдалить
  22. Если не Вас не затруднит. Буду очень признателен.

    ОтветитьУдалить
  23. Честно говоря, у меня ни разу не возникала потребность в истории буфера обмена. А из actions единственное полезное - открытие url в браузере, но opera это и так делает (middle click открывает новый таб с url из буфера обмена).

    Так что остаётся только одна фича - объединить CLIPBOARD и PRIMARY. Для этого я использую тулзу autocutsel. Плюсы - она мелкая (~20KB), работает в фоне и не имеет никакого интерфейса. Запускается из ~/.xinitrc примерно так:
    autocutsel -selection PRIMARY -fork
    autocutsel -selection CLIPBOARD -fork

    ОтветитьУдалить
  24. Очень хорошая статья.
    Советовал знакомому и заметил маленькую опечатку:
    Если вы выделяете в текст мышью

    ОтветитьУдалить
  25. @int_ua комментирует...
    Если вы выделяете в текст мышью
    Исправлено, спасибо. И ещё немного причесал статью по мелочи.

    ОтветитьУдалить
  26. Спасибо за наводку! Использую parcellite совместно с FVWM.

    ОтветитьУдалить
  27. Помнится в своё время проводил серьёзный тест всех имеющихся менеджеров буфера обмена и остановился на clipit как минимально требовательном к ресурсам и наименее глючном. Clipit шустрый, компактный и понятный. Чего не скажешь о других упомянутых здесь, типа того же klipper или glippy, который тянет за собой mono.

    Но если используете KDE, то там, конечно, только klipper, без вариантов.

    ОтветитьУдалить