UPD (2026-10-21): в разделе Wayland: готовой замены нет (пока) ниже написано, что аналога x2x для Wayland нет. С тех пор я нашёл рабочий вариант: lan-mouse — программный KVM на Rust. Я запускаю его на ноутбуке с Wayland (niri), и он передаёт клавиатуру и мышь на X11-машину (Archcraft на телевизоре) — то же ощущение «уводишь курсор за край экрана», что и в x2x, но с Wayland-десктопа на X11-сервер.
Коротко о настройке:
Поставьте lan-mouse на обе машины, причём одной и той же версии / коммита. Релиз 0.11.0 с crates.io и git main говорят на разных ревизиях протокола — у меня всё падало с invalid event id, пока обе стороны не совпали.
На X11-машине запустите lan-mouse daemon (он выберет X11-бэкенд эмуляции). Я запускаю его как пользовательский systemd-сервис с DISPLAY=:0 и XAUTHORITY=%h/.Xauthority, чтобы он стартовал при загрузке.
На Wayland-машине добавьте X11-машину в ~/.config/lan-mouse/config.toml:
[[clients]]
position = "right"
hostname = "tv-box"
activate_on_startup = true
Свяжите их: каждая сторона должна авторизовать сертификат другой командой lan-mouse cli authorize-key <имя> <sha256-отпечаток>, затем lan-mouse cli save-config. Отпечаток берётся так: openssl x509 -in ~/.config/lan-mouse/lan-mouse.pem -noout -fingerprint -sha256. Записывайте его строчными буквами — заглавные у меня не сработали.
Откройте UDP-порт 4242 между машинами.
Как вернуться: когда курсор уехал на X11-машину, просто увести его обратно влево у меня работает не всегда. Надёжный способ — release bind lan-mouse: нажмите вместе Ctrl + Shift + Super + Alt, и курсор вернётся на исходный экран.
Что делает x2x
x2x связывает два X-дисплея так, что клавиатура и мышь на одном управляют другим. Перемещаешь курсор за край экрана — он появляется на втором дисплее. Печатаешь на клавиатуре — буквы идут туда. Буфер обмена тоже работает между дисплеями.
Инструменту больше 20 лет, изначально его написал Давид Чайкен в DEC. Под капотом используется расширение XTEST. Работает через обычные X11-соединения или SSH-туннели.
Никакого KVM-переключателя. Никакого окна удалённого рабочего стола, съедающего половину экрана. Просто курсор скользит с одного монитора на другой.
Мой сетап
На полке рядом с телевизором стоит ThinkPad T460s. На нём Archcraft, он подключён к док-станции и соединён с телевизором через HDMI. С дивана я сижу со своим основным ноутбуком. Запускаю x2x — и когда двигаю курсор за правый край экрана ноутбука, он появляется на телевизоре. Могу управлять хомсервером оттуда — открыть браузер, починить застрявший медиаплеер, заглянуть в десктопное приложение — без второй клавиатуры.
Вот и вся суть. Одна клавиатура, одна мышь, два экрана.
Что я пробовал до этого
К x2x я пришёл не сразу. Сначала перепробовал более очевидные варианты:
RDP — полноценный удалённый рабочий стол в отдельном окне. Работает, но это именно окно поверх моего экрана, а не бесшовный переход курсора. Для «быстро что-то поправить на сервере» — избыточно.
VNC — та же история: окно с чужим рабочим столом, лаг картинки, приходится жать по крошечному превью. Не то ощущение, которое мне было нужно.
KDE Connect — умеет использовать телефон как тачпад/клавиатуру и много чего ещё между устройствами, но заточен под связку «телефон ↔ компьютер», а не «два десктопных X-дисплея рядом».
Все они решают задачу «показать чужой экран у себя». А мне нужно было обратное — оставить оба экрана как есть и просто перегонять между ними клавиатуру и мышь. В моём случае x2x подошёл заметно лучше всего перечисленного: никакого окна, никакого второго рабочего стола — курсор просто перетекает на соседний монитор.
Установка
x2x есть в большинстве дистрибутивов:
Terminal window
# Arch Linux / AUR
yay-Sx2x
# Debian / Ubuntu
sudoaptinstallx2x
# Fedora
sudodnfinstallx2x
# Gentoo
sudoemergex11-misc/x2x
Или собрать из исходников:
Terminal window
gitclonehttps://github.com/dottedmag/x2x && cdx2x
./bootstrap.sh
./configure
make && sudomakeinstall
Способ 1: через SSH (проще и безопаснее)
Самый простой путь — подключиться по SSH с пробросом X11 и запустить x2x на удалённой машине:
Terminal window
ssh-XChomeserverx2x-east-to:0.0
-X включает проброс X11 через SSH
-C включает сжатие
-east означает, что дисплей хомсервера справа (на восток) от ноутбука
-to :0.0 указывает на дефолтный дисплей удалённой машины
Если ноутбук справа, а сервер слева — используйте -west.
Полный адрес дисплея тоже работает:
Terminal window
ssh-XChomeserverx2x-west-tohomeserver:0.0
Когда отключаетесь от SSH, x2x останавливается автоматически. Никаких зависших процессов.
На практике команда, которую я реально запускаю с ноутбука, выглядит так:
Terminal window
ssh-YCarchcraft-lan"/usr/bin/x2x -east -to :0"
Полный путь до x2x важен: когда вы передаёте команду через SSH, логин-профиль не загружается и PATH может не содержать эту программу. -YC включает проброс с сжатием, archcraft-lan — хостнейм в моей локальной сети, -to :0 указывает на дефолтный дисплей хомсервера.
Способ 2: прямое подключение через xauth
Если нужен буфер обмена между дисплеями или хочется обойтись без SSH, можно запустить x2x локально и подключиться к удалённому X-серверу напрямую.
Сначала скопируйте куки аутентификации X11 с хомсервера на ноутбук.
Где :0 — дисплей ноутбука, а homeserver:0.0 — удалённый дисплей.
Проверить наличие куки можно командой:
Terminal window
xauthnlist
Также нужно, чтобы TCP-порт X11 был открыт на обеих машинах (порт 6000 + номер дисплея). Проверьте /etc/X11/xorg.conf или настройки вашего дисплей-менеджера.
Способ 3: через xhost (только для локальной сети, быстро, но небезопасно)
Для домашней локалки можно обойтись совсем без куки. На хомсервере разрешите подключение ноутбука:
Terminal window
xhost+<ip-адрес-ноутбука>
Затем на ноутбуке:
Terminal window
x2x-from:0-tohomeserver:0.0-east
Это наименее безопасный вариант. Любой в сети может подключиться к вашему X-серверу. Нормально для домашней локалки, которой вы доверяете, но не для чего-то доступного извне.
Полезные опции
Terminal window
# Направление
x2x-toserver:0.0-east# сервер справа
x2x-toserver:0.0-west# сервер слева
x2x-toserver:0.0-north# сервер сверху
x2x-toserver:0.0-south# сервер снизу
# Только клавиатура, без мыши
x2x-toserver:0.0-east-nomouse
# Без буфера обмена
x2x-toserver:0.0-east-nosel
# Ждать готовности дисплеев (удобно в скриптах)
x2x-toserver:0.0-east-wait
# Блокировать возврат курсора при зажатых кнопках мыши
x2x-toserver:0.0-east-buttonblock
Проблема застрявшего курсора
Одна реальная проблема, которую я пока не решил до конца: когда SSH-соединение обрывается (WiFi дёрнулся, ноутбук уснул и т.д.), курсор может застрять на дисплее хомсервера. Обратно его не вернуть, потому что x2x уже не передаёт события мыши, но удалённый X-сервер всё ещё считает, что владеет курсором.
Обходные пути:
Убить и перезапустить x2x. Если SSH-сессия ещё жива, убийство x2x на удалённой стороне возвращает курсор на локальный дисплей.
Подключиться по SSH и запустить xdotool mousemove. Если есть шелл на хомсервере, можно переместить курсор программно:
Terminal window
sshhomeserverxdotoolmousemove00
Использовать xhost + на хомсервере напрямую. Если есть физический доступ — подойдите к телевизору и наберите:
Terminal window
# На хомсервере убить зависший x2x
pkillx2x
Если у кого-то есть более элегантное решение — буду рад услышать.
Когда использовать x2x
Подходит для:
Управления машиной рядом с основным рабочим местом
Домашнего сервера, подключённого к телевизору, с которым нужно иногда взаимодействовать
Ситуаций, когда нужен весь экран, а не окно удалённого рабочего стола
Быстрых двухмашинных сетапов, которые не оправдывают KVM-переключатель
Не подходит для:
Машин далеко друг от друга на медленной сети (задержка важна)
Wayland — см. ниже
Сложных мультимониторных раскладок (бывает капризничает)
Wayland: готовой замены нет (пока)
x2x работает через расширение XTEST, которое позволяет внедрять события ввода в окна другого X-сервера. Wayland построен с более строгой моделью безопасности — один композитор не может напрямую управлять вводом другого. Это ломает основной функционал x2x.
Прямого аналога для Wayland сегодня нет. Ближайшие варианты:
Input Leap (форк Barrier/Synergy) — делится клавиатурой и мышью по сети, лучше поддерживает Wayland, чем предшественники. Работает по модели клиент/сервер, а не через прямое внедрение ввода.
Synergy / Barrier — более старые инструменты, от которых форкнулся Input Leap. До сих пор существуют и поддерживаются, но Input Leap обычно предпочтительнее.
KVM-переключатели или USB-хабы — аппаратное решение, без софта. Подходит, если обе машины физически рядом.
Я не пробовал ни один из этих инструментов. Предполагаю, что ни один из них не будет таким бесшовным, как x2x — скольжение курсора, ощущение «просто работает», минимальная настройка. Эти инструменты работают как сервисы, требуют конфигурации и оперируют на другом уровне. Но если вы на Wayland — это то, что есть.
Сообщество Linux работает над стандартизированными протоколами (такими как XDG-foreign) для контролируемого обмена вводом и буфером обмена между композиторами Wayland, но стабильного и широко доступного решения пока нет. Стоит обратить внимание на rkvm — нативный для Wayland инструмент обмена вводом, написанный на Rust.