Я создаю инструмент командной строки, чтобы сделать некоторые из моих задач более эффективными. Мне нужно иметь возможность записывать контент в буфер обмена, но по какой-то причине он не работает для меня.
Я попытался установить и xclip, и xsel, но у обоих одинаковое поведение: они могут нормально читать и записывать в буфер обмена, но я не могу получить к нему доступ из основного графического интерфейса Ubuntu.
Я также попробовал это в терминале ...
echo "hello" | xclip
Тогда, если Ctrl kbd> + Shift kbd> + V kbd>, я получаю исходную запись в буфере обмена, а не «привет». Но если я попытаюсь получить контент из xclip, он будет работать нормально.
Основная цель - получить контент, вставляемый в Firefox или любые другие программы на основе GUI, которые я использую.
Любая помощь будет оценена!
Спасибо
Ну, в X есть несколько разных буферов обмена. В xclip
текст по умолчанию копируется в «буфер выбора» - обычно вы просто выделяете текст мышью, а затем можете вставить его средней кнопкой мыши. Этот буфер является отдельным от того, из которого вы можете вставить с помощью Ctrl-Shift-V.
Попробуйте также
echo "hello" | xclip -selection clipboard
, см.
man xclip
для более подробной информации о xclip
.Я раньше использовал утилиты wxcopy и wxpaste от windowmaker, но недавние версии Linux (или X версий), кажется, повредили их - я подозреваю, что безопасность была ограничена, и они не были обновлены для соответствия. Например, Вы могли сделать вещи как:
echo fred | wxcopy | tr "a-z" "A-Z" | wxpaste
получить вывод FRED. (Это - изобретенный пример, так как Вы получили бы то же самое без финала wxpaste, но я думаю, что это дает аромат того, чего можно достигнуть.)
Однако можно достигнуть того же эффекта с помощью "xcb" пакета, который невероятно легок и также обеспечивает крошечное (полученное в итоге) визуальное представление 8 буферов обмена.
Я записал пару сценариев оболочки wcopy/wpaste несколько лет назад, для создания wxcopy/wxpaste немного более приятный к моему вкусу. Я обновил их сегодня вечером для работы или с wxcopy/wxpaste или с xcb. Это делает их немного более сложными, чем они должны быть, но я вставлю их в здесь - надо надеяться, они не являются слишком длинными для этого форума.
Вот wcopy:
#!/bin/sh
#
# Provide some enhancements to the wxcopy command, which copies standard input
# to an X11 clipboard text buffer.
#
# Allow copying from stdin to any of the cutbuffers. Note that they are
# indexed counting from 0.
#
# Author: Luke Kendall
#
if [ `uname -s` = "Darwin" ]
then
WXCOPY=pbcopy
WXPASTE=pbpaste
else
WXCOPY=wxcopy
WXPASTE=wxpaste
BUFSPEC="-cutbuffer"
xcb -p 0 > /tmp/wc$$
if echo "fred$$" | wxcopy -cutbuffer 0 && [ `wxpaste` = "fred$$" ]
then
: # Great, they're actually working. Not common on modern Linuxes.
echo "working" > $HOME/.wcopyok
else
rm -f $HOME/.wcopyok
WXCOPY="xcb -s"
WXPASTE="xcb -p"
BUFSPEC=
fi
xcb -s 0 < /tmp/wc$$
fi
unset WXARGS
if [ $# = 0 ]
then
$WXCOPY ${WXCOPY_DEFS:-0}
else
MYNAME=`basename $0`
USAGE="usage: $MYNAME [ [0-9]... ] [$WXCOPY's args]"
numlist=true
for n
do
if $numlist && expr "x$n" : 'x[0-9][0-9]*$' > /dev/null
then
NUMARGS="$NUMARGS $n"
else
numlist=false
if [ "x$n" = "x-h" ]
then
echo "$USAGE" >&2
exit 0
else
WXARGS="$WXARGS $n"
fi
fi
done
set - $NUMARGS
$WXCOPY $WXCOPY_DEFS $WXARGS $BUFSPEC $1
ORIG="$1"
shift
for n
do
$WXPASTE $BUFSPEC $ORIG | $WXCOPY $WXCOPY_DEFS $WXARGS $BUFSPEC $n
done
fi
И вот wpaste:
#!/bin/sh
#
# Provide some enhancements to the wxpaste command, which pastes from X11
# clipboard text buffers to standard output.
#
# Allow pasting to stdout from any of the cutbuffers. Note that they are
# indexed counting from 0.
#
# Author: Luke Kendall
#
if [ `uname -s` = "Darwin" ]
then
WXCOPY=pbcopy
WXPASTE=pbpaste
else
WXCOPY=wxcopy
WXPASTE=wxpaste
BUFSPEC="-cutbuffer"
if [ -s $HOME/.wcopyok ]
then
: # Great, they're actually working. Not common on modern Linuxes.
else
WXCOPY="xcb -s"
WXPASTE="xcb -p"
BUFSPEC=
fi
fi
if [ $# = 0 ]
then
$WXPASTE ${WXPASTE_DEFS:-0}
else
MYNAME=`basename $0`
USAGE="usage: $MYNAME [ [0-9]... ] [$WXPASTE's args]"
for n
do
if expr "x$n" : 'x[0-9][0-9]*$' > /dev/null
then
NUMARGS="$NUMARGS $n"
elif [ "x$n" = "x-h" ]
then
echo "$USAGE" >&2
exit 0
else
WXARGS="$WXARGS $n"
fi
done
set - $NUMARGS
: echo "Num args: $#"
for n
do
: echo "Doing: $WXPASTE $WXPASTE_DEFS $WXARGS $BUFSPEC $n"
$WXPASTE $WXPASTE_DEFS $WXARGS $BUFSPEC $n
done
fi
Если кто-либо заинтересовал, я записал страницы справочника для сценариев, также - но можно, вероятно, найти их (они все еще допустимы) путем поиска с помощью Google wcopy.1x и wpaste.1x
Чтобы упростить для себя, я создал псевдоним для xclip
, чтобы имитировать функциональность pbcopy
и и pbpaste
в macosx.
sudo apt-get install xclip -y
, затем отредактируйте ~/.bashrc
, добавив псевдонимы
nano ~/.bashrc
, добавьте эти строки
alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'
Сохраните и выйдите, затем откройте новую оболочку или запустите source ~/.bashrc
использовать псевдонимы
Мой пост в блоге содержит дополнительную информацию.