Skip to content

volbil/fwdisplay

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fucky Wucky Display

Виявляється ніхто не зробив способу підключити iPad 2, якому 15 років і останнє оновлення софту якого було років 10 тому, нормального способу використовувати цей гарний девайс як другий (або третій) дисплей. Після фрустрації з (неуспішними) спробами завести корпоративний легасі софт я здався та навайбкодив рішення проблеми. Бо e-waste це жахливо, і будь яка техніка заслуговує на ще один шанс.

Фічі

  • З'єднання по USB, ніяких затримоч через стрімінг по WiFi
  • Кросплатформа, тестував на macOS, на вінді працює після танців з бубном, в теорії повинно працювати на лінукс, але я не перевіряв (страшно думати про пекло x11/wayland)
  • Кліки мишкою через тачскрін, тап одним пальцем - лкм, двома пальцями - пкм
  • Гарячий реконект

Збірка

Спочатку встановлюємо Theos - боже благослови розробників, які підтримують відкритий тулчейн для збірки під 10 річну систему, про яку всі забули:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/theos/theos/master/bin/install-theos)"

На macOS потрібно встановити ці залежності:

# JPEG бібліотека, бо ми стрімимо його
brew install jpeg-turbo

# Для крос компіляції під вінду
brew install mingw-w64 cmake nasm

Залежності для Linux (я не тестував, ви можете бути першими!):

# Debian/Ubuntu
sudo apt install build-essential libturbojpeg0-dev libx11-dev libxext-dev

# Fedora
sudo dnf install gcc libjpeg-turbo-devel libX11-devel libXext-devel

# Arch
sudo pacman -S base-devel libjpeg-turbo libx11 libxext

Для запуску на вінді потрібно встановити наступні залежності (вищезгадані танці з бубном):

  • Apple Mobile Device Support GitHub
  • Virtual Display Driver GitHub

Власне сама збірка:

./build-ipad.sh  # Збираємо .deb (не знаю чому на iOS використовується dpkg але чом би й ні)
./build-macos.sh
./build-windows.sh
./build-linux.sh

Бінарники будуть доступні в ./dist

Інсталяція на iPad

Для інталяції потрібен iPad 2 з jailbreak та iOS 9.3.5 (остання доступна версія). Джейлбрейк робиться дуже просто, встановивши сертифікат (посилання зверху сторінки) та натиснувши, можливо кілька разів, кнопку Run на carbon.sep.lol (потрібно виконувати після кожного ребуту, джейлбрейк не персистентний), після успішного виконання айпад перезвавнтажиться і з'явиться альтернативний "магазин" Cydia. Опціонально раджу звідти встановити iFile - можна закидати файли по http та Filza - зручно встановлювати .deb файли. Якщо ви ватажили файл через iFile, то він буде лежать в руті пристрою.

Запуск дисплею

./dist/fwdisplay-sender-macos  # Або система, під яку ви зібрали

Voilà тепер у вас є гарний другий (або третій) монітор

Архітектура

Тут даю слово архітектору цього невеличкого технічого чуда, а саме Claude (Opus 4.6)

┌──────────────┐  USB/usbmuxd    ┌──────────────────┐
│  Відправник  │ ──────────────> │  Застосунок iPad │
│              │  JPEG кадри     │                  │
│  захоплення  │                 │   декодування    │
│  кодування   │ <────────────── │   відображення   │
│  потік       │  події дотику   │   ввід дотиком   │
└──────────────┘                 └──────────────────┘

Дротовий протокол

Кадри (відправник -> iPad): [4-байтна BE uint32 довжина][JPEG дані]

Дотик (iPad -> відправник): [1 байт: тип 0x01][1 байт: фаза][4 байти: float BE x][4 байти: float BE y]

Фази дотику: 0=початок, 1=рух, 2=кінець, 3=скасовано, 4=правий клік

Примітки щодо платформ

macOS

Віртуальний дисплей створюється автоматично за допомогою приватних API CoreGraphics (macOS 12.4+). Дисплей з'являється та зникає разом з підключенням iPad. Події дотику перетворюються на події миші через CoreGraphics.

Windows

Windows потребує сторонній драйвер віртуального дисплея для функціональності другого екрана. Відправник автоматично виявляє поширені драйвери (VDD, IddSampleDriver тощо). Без драйвера він захоплює основний монітор.

Для USB-комунікації необхідно встановити Apple Mobile Device Support.

Linux

Відправник захоплює екрани X11 за допомогою XShm. За потреби віртуальні дисплеї можна створювати за допомогою xrandr.

Структура проєкту

fwdisplay/
├── sender/               # C відправник (кросплатформний)
│   ├── sender.c          # Головний цикл, JPEG кодування, потокова передача
│   ├── usbmux.c/h        # Клієнт протоколу usbmuxd
│   ├── capture.h          # Платформо-незалежний інтерфейс захоплення
│   ├── capture_mac.c      # macOS: захоплення через CoreGraphics
│   ├── capture_win.c      # Windows: захоплення через GDI + виявлення віртуального дисплея
│   ├── capture_linux.c    # Linux: захоплення через X11/XShm
│   ├── virtual_display.m  # macOS: віртуальний дисплей через приватний API
│   ├── cursor_mac.m       # macOS: композитинг курсора через AppKit
│   ├── touch.c            # macOS: перетворення дотику в мишу
│   └── Makefile
├── ipad/                 # Додаток-приймач для iPad (Theos/Objective-C)
│   ├── FWDAppDelegate.m   # Життєвий цикл додатку, пропуск кадрів
│   ├── FWDViewController.m # Відображення + ввід дотиком
│   ├── FWDTCPServer.m     # TCP сервер, зчитування кадрів
│   └── Makefile
├── build-macos.sh
├── build-windows.sh
├── build-linux.sh
└── build-ipad.sh

ЧаПи

Питання: чому рідмі не англійською

Відповідь: це спеціальна програма навчання вестерняків української, якщо вони натраплять на цей репозиторій

Питання: чи можу я (автор питання) покращити цей проєкт?

Відповідь: звісно!


Зроблено з любов'ю за один вечір

Volbil

About

Fucky Wucky Display - даємо iPad 2 друге життя

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages