Pull to refresh

Synergy — одна клава-мышь на все компьютеры

Lumber room
Есть замечательная программа synergy. Позволяет использовать один комплект клава-мышь несколькими компьютерами. Она кроссплатформенна, работает в системах MS — как Windows, так и NT, в Mac OS X. Ну, и конечно — в X11.

О synergy здесь уже говорили, я немножко добавлю.

Windows и OS X касаться не буду, уделю внимание лишь X11.

Компьютер, к которому подключены клава и мышь выступает в роли сервера, на нём запускается synergys. Прочие компьютеры — клиенты — на них работает synergyc, который подключается к synergys. По TCP, конечно. Все настройки делаются на стороне сервера. В конфиге описываются расположение экранов сервера и клиентов относительно друг друга — справа, слева, сверху, снизу.

Установка в Debian подобных системах:

apt-get install synergy

Пример конфига /etc/synergy.conf. В центре — компьютер main, слева от него laptop1, справа laptop2. Все они образуют кольцо — когда указатель переходит левый край левого экрана, он оказывается на правом краю правого.

# /etc/synergy.conf
#
# Экраны всех компьютеров, включая серверный
# Именуются хост именами компьютеров
section screens
  main:
  laptop1:
  laptop2:
end
#
# Взаимное расположение экранов
section links
  main:
    left: laptop1
    right: laptop2
  laptop1:
    left: laptop2
    right: main
  laptop2:
    left: main
    right: laptop1
end

Запуск сервера — командой synergys.

Подключение — synergyc имя_или_адрес_сервера. Если хост имя клиента отличается от того, что прописано в конфиге сервера, то можно указать параметр -n имя_клиента, где имя_клиента — имя из конфига.

Сервер работает только в иксах, и только в активном X сервере — в том, что принимает ввод от HID'ов. Если переключиться в другую консоль, включая другой X сервер, то synergys перестаёт обслуживать клиентов. До тех пор, пока X сервер снова не получит клаву-мышь.

Когда на одном компьютере поочерёдно работают несколько пользователей, можно запустить synergys в каждом X сервере, включая тот, где запущен GDM. Каждый synergys использует свой TCP порт, а что касается конфига — достаточно одного на всех. Дефолтный порт — 24800. Для указания порта используется ключ -a [адрес][:порт]. Пример: synergys -a :24801. Адрес не указан — слушает на всех интерфейсах.

Synergy не очень безопасна. Все нажатия клавиш передаются открытым текстом, всторенных механизмов шифрования нет. На помощь придёт SSH с форвардингом портов. Локальным форвардингом. О форвардинге можно почитать man ssh и статью SSH Port Forwarding.

Сначала запускается ssh:

ssh -f -L24800:имя_или_адрес_сервера:24800 имя_или_адрес_сервера sleep 10

Локальный порт 24800 проброшен до порта 24800 сервера. ssh ушел в бэкграунд (ключ -f) и выполняет на удалённой стороне sleep 10. За эти 10 секунд надо успеть запустить synergyc, иначе ssh завершит работу.

synergyc localhost

Теперь об удобстве использования. Если сервер можно запускать при старте иксов автоматически — вписав в .xsession, либо, в соответствии с сегодняшней модой — пощёлкав мышью в центре управления GNOME/KDE/XFCE/LXDE, то с клиентом дело сложнее. Его лучше запускать интерактивно.

Есть утилита quicksynergy. Иксовая, точнее — под GTK. Так вот. Мне она не нравится. Для того, чтобы запустить клиента, надо перейти на вкладку, вписать имя сервера, щёлкнуть «запустить», потом щёлкнуть «закрыть», чтобы она спряталась в трэй. Запоминает лишь последний вписанный сервер. Значок в трэе слишком здоровый — бросается в глаза. ssh запускать не умеет. Вобщем — ужасная вещь. Я и не пользуюсь ею.

Написал свой скрипт для запуска и остановки клиента. Обычный шелл скрипт. На моём компьютере этот скрипт называется ~/bin/syn

При запуске без параметров, ~/syn выдаёт коротенькую помощь по использованию.

Конфигурация в самом тексте скрипта. Блок case $TARGET in, идущий сразу после комментария # Start user configurable settings.

Пример конфигурации. Имя первого хоста, домашнего, например — main.example.com, на нём два X сервера — работают 2 пользователя. Соответственно — два synergy сервера. Имя второго хоста, например, на работе — second.example.com. Там один X сервер. Локальные порты должны быть разные, чтобы несколько клиентов можно было запустить одновременно.

# ...
# Start user configurable settings
case $TARGET in
  d1)
    # Первый хост, первый X сервер
    SYN_LOCAL_PORT=24800
    REMOTE_HOST='main.example.com'
    SYN_REMOTE_PORT=24800
  d2)
    # Первый хост, второй X сервер
    SYN_LOCAL_PORT=24801
    REMOTE_HOST='main.example.com'
    SYN_REMOTE_PORT=24801
  w)
    # Второй хост
    SYN_LOCAL_PORT=24802
    REMOTE_HOST='second.example.com'
    SYN_REMOTE_PORT=24800
# ...

Ещё, неплохо поправить строку Defined tragets функции usage, с которой начинается скрипт.

Запуск клиента:

$ ./bin/syn d1 start
Starting: 'ssh -f -L24800:main.example.com:24800 main.example.com sleep 10' .. done.
Starting: 'synergyc 127.0.0.1:24800' .. done.

Просмотр состояния запущенного клиента:

$ ./bin/syn d1 status
Checking ssh process: 'ssh -f -L24800:main.example.com:24800 main.example.com sleep 10' .. running, PID 18503.
Checking synergyc process: 'synergyc 127.0.0.1:24800' .. running, PID 18505.

Убить клиента:

./bin/syn d1 stop
Killing: 'synergyc 127.0.0.1:24800' .. done
Killing: 'ssh -f -L24800:main.example.com:24800 main.example.com sleep 10' .. done.

Просмотр состояния незапущенного клиента:

./bin/syn d1 status
Checking ssh process: 'ssh -f -L24800:main.example.com:24800 main.example.com sleep 10' .. stopped
Checking synergyc process: 'synergyc 127.0.0.1:24800' .. stopped.

P.S. Для бысторого запуска чего-либо из командной строки, я пользуюсь Тильдой, привязанной к клавишам <Alt ~>.
Tags: x11synergyhidlinuxshellssh
Hubs: Lumber room
Total votes 15: ↑12 and ↓3 +9
Comments 13
Comments Comments 13

Popular right now