Hướng dẫnGuide

Hướng dẫn sử dụng SwiftDeskSwiftDesk user guide

Từ cài host đến xử lý sự cố. Ví dụ dùng địa chỉ minh họa 192.168.1.20 và PIN 123456; hãy thay bằng thông tin trên khay của máy bạn.From installing the host to troubleshooting. Examples use the sample address 192.168.1.20 and PIN 123456; replace them with what your tray shows.

1. Cài host trên Windows

Từ 0.7.0, bản Windows là một app: vừa là host cho máy này được điều khiển, vừa điều khiển máy khác (xem mục 3). Cài trong tài khoản Windows mà bạn đăng nhập hằng ngày.

Cách 1: bộ cài

  1. Tải SwiftDesk-Host-Setup-Windows.exe và chạy, bấm Install.
  2. Windows Defender Firewall hỏi lần đầu: bấm Allow access để thiết bị khác trong mạng kết nối được.
  3. Biểu tượng SwiftDesk xuất hiện ở khay hệ thống (góc phải taskbar). Windows 11 thường giấu biểu tượng mới trong mũi tên ^: kéo nó ra taskbar để luôn thấy. Bấm chuột phải để xem Address và PIN, bấm chuột trái để mở cửa sổ SwiftDesk.

Cách 2: một lệnh PowerShell

irm https://swiftdesk.platformforge.dev/install.ps1 | iex

Lệnh tải bộ cài mới nhất và cài cho người dùng hiện tại. Nếu bạn muốn xem trước nội dung, mở install.ps1 trong trình duyệt.

Lưu ý về phiên Windows

  • Host chụp màn hình của phiên đang đăng nhập. Khi máy khóa, đang ở màn hình đăng nhập hoặc hộp thoại UAC, host không chụp được; nó tự nối lại khi desktop trở lại.
  • Gập màn hình laptop: vẫn dùng được. Khi màn hình trong tắt, host chuyển sang chụp bằng GDI; hình có thể kém mượt hơn đường GPU.
  • Qua Remote Desktop (RDP): host chia sẻ màn hình ảo của phiên RDP. Nếu bạn ngắt RDP (Disconnect), Windows bỏ màn hình ảo nên client thấy đen cho tới khi bạn vào lại.
  • Cấu hình và PIN nằm ở %APPDATA%\swiftdesk\host.json, log ở %LOCALAPPDATA%\swiftdesk\host.log.

2. Cài host trên macOS

Gói SwiftDesk-macOS.pkg cài app SwiftDesk và ứng dụng SwiftDesk Host. Host là bản universal, chạy trên Intel và Apple silicon, từ macOS 12.

  1. Mở gói .pkg và cài. Nếu macOS báo không xác minh được nhà phát triển: System Settings → Privacy & Security → Open Anyway.
  2. Mở SwiftDesk Host. macOS hỏi quyền Screen Recording: vào System Settings → Privacy & Security → Screen & System Audio Recording, bật SwiftDesk Host.
  3. Lần đầu có thiết bị gửi chuột hoặc phím, macOS hỏi quyền Accessibility: bật SwiftDesk Host trong Privacy & Security → Accessibility.
  4. Khởi động lại host (Quit trên thanh menu rồi mở lại) để quyền có hiệu lực.
Màn hình đen? Gần như luôn là thiếu quyền Screen Recording cho SwiftDesk Host. Menu trên thanh menu hiện dòng cảnh báo ⚠, bấm vào để mở đúng trang cài đặt.

Sau khi cập nhật host, macOS có thể coi đó là ứng dụng mới và hỏi lại quyền. Khi đó mở lại hai trang trên, gỡ dòng SwiftDesk Host cũ bằng nút “−”, thêm lại bằng “+”, rồi khởi động lại host. Log của bản cài từ .pkg nằm ở /tmp/swiftdesk-host.log.

3. Kết nối

Từ app desktop (Windows, macOS)

Windows và macOS dùng chung một app. Bấm chuột trái vào biểu tượng khay để mở cửa sổ SwiftDesk: phía trên là Your address và PIN của máy này, bên dưới có hai tab:

  • This computer: ai đang kết nối, thiết bị đã pair, hộp duyệt kết nối, nhật ký.
  • Connect to another computer: ô kết nối nhanh (địa chỉ[:cổng] và PIN) và danh bạ với Add, Edit, Delete, Import. Mỗi máy từ xa mở trong một cửa sổ SwiftDesk riêng.

Menu khay (chuột phải) cũng có Connect to…. Nhờ vậy máy Windows điều khiển được máy khác mà không cần trình duyệt.

Từ app Android

  1. Bấm Scan QR và quét mã trong cửa sổ SwiftDesk của máy cần điều khiển: app tự thêm và pair máy đó.
  2. Hoặc bấm Add host, chọn SwiftDesk, nhập tên và địa chỉ. Cổng nằm trong địa chỉ và có thể bỏ trống: 192.168.1.20 hoặc 192.168.1.20:7340. Lần đầu mở host, app hỏi PIN.

Menu ⋮ trên mỗi host có Edit, Duplicate, Forget pairing, Delete. Export và import danh bạ: xem mục 4. iPad/iOS: sắp có.

Từ trình duyệt, không cài gì

  1. Mở http://192.168.1.20:7340/ trong Chrome, Safari, Firefox hoặc Edge.
  2. Đặt tên thiết bị, nhập PIN, bấm Connect. Token được lưu trong trình duyệt đó.

Bằng mã QR

Trên chính máy host, cửa sổ SwiftDesk (chuột trái vào biểu tượng khay) hoặc http://127.0.0.1:7340/admin có mã QR. Trên điện thoại, bấm Scan QR trong app để thêm và pair; quét bằng camera thì mở web client với PIN điền sẵn. Trên desktop hoặc web, dán đường link của mã QR.

Dùng địa chỉ nào?

Dùng địa chỉ IP:

  • Cùng Wi-Fi hoặc mạng LAN: IP nội bộ của host, ví dụ 192.168.1.20.
  • Qua Tailscale: IP Tailscale của host (dạng 100.x.y.z). Dòng Your address trong cửa sổ SwiftDesk và dòng Address trên menu khay ưu tiên hiện IP Tailscale.

SSH

Add host → SSH → địa chỉ (cổng mặc định 22), user, mật khẩu (để trống sẽ hỏi khi kết nối). Lần đầu app hiện dấu vân tay khóa máy chủ để bạn xác nhận và ghim lại; nếu khóa đổi, app cảnh báo rõ và hỏi bạn trước khi chấp nhận khóa mới. Terminal tương thích xterm, 10 000 dòng cuộn.

4. VNC, RDP và mật khẩu đã lưu

VNC

App có trình xem VNC tích hợp; VNC chỉ có trong app, không có trong trình duyệt. Add host → VNC → địa chỉ.

  • Máy Mac: bật Screen Sharing trong System Settings → General → Sharing, rồi đăng nhập bằng tên tài khoản và mật khẩu Mac.
  • VNC server chuẩn: nhập mật khẩu của VNC server.

RDP

Mục RDP lưu địa chỉ máy Windows và mở nó bằng Remote Desktop / Windows App của Microsoft (cần cài app đó). RDP tích hợp sẵn trong SwiftDesk sẽ có sau.

Mật khẩu đã lưu

Bật Remember password khi nhập mật khẩu: mật khẩu được lưu trong keychain của hệ điều hành, không nằm trong file danh bạ.

Export và import danh bạ

  • Hosts only: chỉ danh sách host, không kèm mật khẩu hay token.
  • Hosts + saved passwords (encrypted): kèm mật khẩu đã lưu, mã hóa AES-256-GCM bằng passphrase bạn đặt. Không có passphrase thì không mở được file, hãy giữ nó cẩn thận.
  • Import tự nhận ra file mã hóa và hỏi passphrase. Khi trùng host, bạn chọn Replace, Keep both hoặc Skip.

5. PIN, owner và quản trị

  • Rotate (mặc định): sau mỗi lần pair thành công host sinh PIN mới, mỗi PIN chỉ dùng được một lần.
  • Fixed: giữ nguyên PIN tới khi bạn đổi, giống AnyDesk. Đặt PIN trong giao diện là chuyển sang Fixed.
  • Owner: thiết bị pair đầu tiên là owner. Owner có nút Manage host trong app và web client: xem và đổi PIN, đổi chế độ, đổi vai trò thiết bị, thu hồi thiết bị, đọc nhật ký. Thiết bị thường không làm được những việc này. Pair lại bằng PIN luôn hạ về vai trò user.
  • Ask me before anyone connects: bật trên chính máy host (menu khay hoặc cửa sổ SwiftDesk). Khi có thiết bị không phải owner kết nối, người ngồi ở máy host bấm Accept hoặc Decline trong cửa sổ SwiftDesk; sau 30 giây không trả lời thì tự từ chối. Việc duyệt không làm từ app của owner.
  • Pause new connections: từ chối mọi kết nối mới, phiên đang mở vẫn giữ.
  • Thu hồi thiết bị từ khay, trang quản trị, app của owner hoặc cloud: phiên đang mở của thiết bị đó bị ngắt ngay, lần sau phải nhập PIN.
  • Nhật ký: mọi lần pair, kết nối, thu hồi, đổi PIN, nhận file đều ghi vào audit.log cạnh host.json.
  • Chống dò PIN: 5 lần sai từ một IP thì khóa IP đó 60 giây; 30 lần sai trong 10 phút từ mọi IP thì khóa pairing, và đổi PIN nếu đang ở chế độ Rotate.

6. Biểu tượng khay

Màu biểu tượng: xanh dương là rảnh, xanh lá là đang có người điều khiển, xám là tạm dừng nhận kết nối. Mỗi khi có thiết bị kết nối, hệ điều hành hiện thông báo.

  • Bấm chuột trái: mở cửa sổ SwiftDesk: Your address và PIN ở trên, tab This computer (đang kết nối, thiết bị đã pair, duyệt kết nối, nhật ký) và tab Connect to another computer.
  • Bấm chuột phải (trên Mac: Ctrl-click): mở menu, trong đó có Address và PIN, bấm để copy.
Mục menuTác dụng
Danh sách đang kết nốiDisconnect từng thiết bị hoặc Disconnect all
Address · PINBấm để copy địa chỉ (ưu tiên IP Tailscale) hoặc PIN
Rotate / Fixed · New random PINĐổi chế độ PIN, sinh PIN ngẫu nhiên
Ask me before anyone connectsHỏi người ở máy host trước khi cho thiết bị không phải owner vào
Pause new connectionsTạm dừng nhận kết nối mới
Open SwiftDesk…Mở cửa sổ SwiftDesk
Connect to…Mở tab Connect to another computer để điều khiển máy khác
Start at login · Cloud · QuitTự chạy khi đăng nhập, trạng thái SwiftDesk Cloud, thoát

7. Trong phiên điều khiển

App và web client có thanh công cụ khác nhau. Web client: thanh công cụ hiện khi con trỏ nằm trên hình. App: thanh công cụ tự ẩn sau 3 giây, chạm vào tay kéo nhỏ ▾ ở mép trên để hiện lại.

Thanh công cụ của app

Biểu tượngTác dụng
DisconnectNgắt phiên
Statsfps, bitrate, thời gian encode, round trip
Reset zoomBỏ zoom sau khi pinch
Touch modeĐổi Trackpad / Direct
KeyboardBàn phím ảo và dải phím đặc biệt
ScreenChuyển màn hình khi host có nhiều màn hình
QualityTrần bitrate 2 / 8 / 20 Mbps
ManageQuản lý host (chỉ owner)
View only · Lock · MuteChỉ xem · Khóa máy host · Tắt tiếng
Send clipboardGửi clipboard của thiết bị sang host
SharpenXin khung hình mới khi hình mờ hoặc vỡ

Thanh công cụ của web client

NútTác dụng
● chấm màuChất lượng mạng: xanh (rtt dưới 80 ms, mất gói dưới 2 %), vàng, đỏ
MuteTắt/bật tiếng
ManageQuản lý host (chỉ owner)
View only · LockChỉ xem · Khóa máy host
SnapLưu ảnh PNG màn hình từ xa
SharpenXin khung hình mới khi hình mờ hoặc vỡ
Fullscreen · KeyboardToàn màn hình · Bàn phím ảo
DisconnectNgắt phiên. Nếu rớt mạng không do bạn, web client tự kết nối lại

Khi mất kết nối, web client tự kết nối lại; app hiện thông báo lỗi kèm nút Thử lại.

Chuột, bàn phím, cảm ứng

Con trỏ ánh xạ 1:1 lên màn hình từ xa; phím gửi theo mã vật lý nên Ctrl+C, Cmd+Space hoạt động như bàn phím cắm thẳng vào host. Chữ gõ từ bàn phím ảo gửi dạng văn bản, gõ tiếng Việt được. Hai chế độ cảm ứng và pinch zoom có trong app:

Cử chỉ (app)Trackpad (mặc định)Direct
Kéo một ngónDi con trỏ như trackpadCon trỏ nhảy tới ngón tay
ChạmClick trái tại con trỏClick trái tại ngón tay
Giữ 0,5 giâyChuột phảiChuột phải
Giữ rồi kéoKéo chuột tráiKéo chuột trái
Hai ngón kéoCuộnCuộn
PinchZoom hình tới 4x (chỉ phía client)Zoom

Clipboard và file

  • Văn bản copy trên host tự đồng bộ sang thiết bị owner. Để gửi clipboard của thiết bị sang host: bấm Send clipboard trong app, hoặc Ctrl/Cmd+V trong web client.
  • Gửi file: kéo thả file vào khung hình trong web client. File lưu ở Downloads/SwiftDesk/, tối đa 4 GB mỗi file và 16 GB mỗi phiên, được gắn nhãn tải từ internet để Windows/macOS cảnh báo khi mở.

8. Chất lượng và mạng yếu

  • Mặc định: tối đa 60 fps, trần 8 Mbps, encode phần cứng. Màn hình đứng yên gần như không tốn băng thông.
  • Nút Quality trong app: Low 2 Mbps (4G yếu), Normal 8, High 20 (xem video). Đây là trần; host vẫn tự hạ khi mạng không đủ.
  • Khi băng thông xuống dưới khoảng 3,5 Mbps, host giảm độ phân giải còn 75 %, tối đa 45 fps. Dưới 1,5 Mbps còn 50 %, tối đa 30 fps. Sàn là 500 kbps, chữ vẫn đọc được.
  • Client hiện thông báo dạng “Network limited: … kbps, 75 % resolution, 45 fps”. Khi mạng khá lên, host nâng dần lại, khoảng 5 giây một bước.
  • Âm thanh Opus có FEC; mất gói vẫn nghe liền. Hình vỡ lâu thì bấm Sharpen.
  • Mượt nhất khi dùng Wi-Fi 5 GHz hoặc dây, và Tailscale có đường thẳng (tailscale status không ghi “relay”).

9. Truy cập từ xa và phạm vi mạng

SwiftDesk ưu tiên LAN và Tailscale. Host chỉ nhận kết nối trong phạm vi đã chọn, kết nối ngoài phạm vi bị từ chối trước cả bước PIN:

--networkAi được kết nối
lan (mặc định)Mạng LAN riêng và Tailscale
tailnetChỉ Tailscale. Nên dùng khi máy ở mạng công cộng
anyMọi nơi. Không khuyến nghị

Muốn điều khiển máy ở nhà khi đang ở ngoài: cài Tailscale trên cả hai thiết bị, đăng nhập cùng tài khoản, rồi dùng địa chỉ Tailscale của host. Không mở cổng 7340 ra internet.

SwiftDesk Cloud (tùy chọn): đăng nhập bằng passkey, thấy mọi host của mình, đổi PIN và thu hồi thiết bị từ xa, mời người nhà, và relay bước bắt tay khi hai máy không thấy nhau trực tiếp. Video vẫn mã hóa đầu cuối giữa hai máy.

10. AI Terminal

AI Terminal là terminal bền bỉ do SwiftDesk giữ trên máy host. Nó liệt kê và mở lại phiên Claude Code, Codex và Cursor theo từng project, và tạo phiên mới: New shell, Claude, Codex hoặc Cursor.

Mở AI Terminal

  • Trình duyệt: http://192.168.1.20:7340/term.
  • App: menu của host → AI terminals.

Chỉ thiết bị owner

Terminal cho quyền truy cập đầy đủ vào máy, nên chỉ thiết bị owner dùng được. Để đặt thiết bị của bạn làm owner: trên máy host mở cửa sổ SwiftDesk → Paired devices → Make owner.

Phiên tồn tại bao lâu

Đóng trình duyệt, đóng app hay rớt mạng đều không làm mất phiên.

Hệ điều hành hostCách giữ phiênKhi host khởi động lại
macOS, Linuxtmux, socket swiftdeskPhiên vẫn còn
WindowsConPTYPhiên kết thúc; phiên AI mở lại được từ danh sách

AI Terminal chưa đi qua relay của SwiftDesk Cloud: hãy kết nối trực tiếp trong LAN hoặc Tailscale. Linux host (chỉ terminal, không chia sẻ màn hình): sắp có bản tải về.

11. Dòng lệnh

Host là một file chạy swiftdesk-host; các cờ hay dùng:

CờÝ nghĩa
--pin 123456Đặt PIN cố định (chuyển sang Fixed)
--name "Office PC"Tên hiển thị trên client
--port 7340Cổng nghe HTTP và WebSocket
--network lan|tailnet|anyPhạm vi được kết nối
--fps 60, --bitrate-kbps 8000Trần fps và bitrate
--screen 1Màn hình chia sẻ lúc khởi động
--no-audioKhông chia sẻ âm thanh
--trayChạy với biểu tượng khay
--list-clients, --revoke <id>Liệt kê và thu hồi thiết bị đã pair
--install-autostart, --uninstall-autostartBật hoặc tắt tự chạy khi đăng nhập

12. Xử lý sự cố

Triệu chứngCách xử lý
Kết nối được nhưng màn hình đen (Mac)Thiếu quyền Screen Recording cho SwiftDesk Host. Bật lại trong Privacy & Security rồi khởi động lại host. Log /tmp/swiftdesk-host.log ghi “declined TCCs”.
Màn hình đen (Windows)Phiên đang khóa, ở màn hình đăng nhập/UAC, hoặc bạn vừa ngắt RDP. Đăng nhập lại vào máy; host tự nối lại.
Laptop Windows gập màn hìnhVẫn hoạt động nhờ chụp GDI; có thể kém mượt hơn. Mở màn hình ra để dùng lại đường GPU.
Mac không nhận chuột/phímThiếu quyền Accessibility cho SwiftDesk Host.
“wrong PIN or expired pairing”Kiểm tra PIN trên khay của đúng host. Ở chế độ Rotate, PIN đã đổi sau lần pair trước. Thiết bị bị thu hồi phải nhập PIN lại.
“too many failed attempts”Chờ 1 phút rồi thử lại.
App báo lỗi khi rớt mạngBấm Thử lại. App chưa tự kết nối lại; web client thì tự nối lại.
AI Terminal báo không có quyềnThiết bị chưa là owner. Trên máy host: cửa sổ SwiftDesk → Paired devices → Make owner.
AI Terminal không mở qua cloudChưa hỗ trợ qua relay của cloud. Kết nối trực tiếp trong LAN hoặc Tailscale.
Không kết nối đượcHai máy có cùng LAN/tailnet không? Mở http://<host>:7340/api/info xem có trả JSON. Kiểm tra Windows Firewall đã cho phép. Kiểm tra --network.
Đang chờ mãiMáy host có thể đang bật “Ask me before anyone connects”: người ngồi ở máy host cần bấm Accept trong cửa sổ SwiftDesk (tự từ chối sau 30 giây).
Hình vỡ, giậtBấm Sharpen; xem chấm mạng (web client); hạ Quality (app); dùng Wi-Fi 5 GHz hoặc dây.
Không có tiếngHost chạy --no-audio? Trình duyệt chặn autoplay: bấm Mute rồi bỏ Mute.
Clipboard không sangChỉ owner nhận clipboard từ host. Trình duyệt chỉ ghi clipboard khi tab đang focus.
Bấm Connect không phản ứngTải lại mạnh trang (Ctrl/Cmd+Shift+R) để lấy web client mới.
Không thấy biểu tượng khay (Windows 11)Mở mũi tên ^ trên taskbar, kéo biểu tượng SwiftDesk ra ngoài.

13. Cập nhật

  • Windows: chạy bộ cài mới hoặc lệnh PowerShell một dòng.
  • macOS: cài gói .pkg mới; nếu macOS hỏi lại quyền, cấp lại như mục 2.
  • Android: cài APK mới đè lên bản cũ.
  • Web client nằm trong host: cập nhật host là có web client mới.

1. Install the host on Windows

Since 0.7.0 the Windows build is one app: it hosts this computer and also controls other ones (see section 3). Install it in the Windows account you normally sign in with.

Option 1: installer

  1. Download SwiftDesk-Host-Setup-Windows.exe, run it and click Install.
  2. Windows Defender Firewall asks once: click Allow access so other devices on your network can connect.
  3. The SwiftDesk icon appears in the system tray. Windows 11 often hides new icons under the ^ arrow: drag it onto the taskbar to keep it visible. Right-click it for the Address and PIN, left-click to open the SwiftDesk window.

Option 2: one PowerShell line

irm https://swiftdesk.platformforge.dev/install.ps1 | iex

It downloads the latest installer and installs it for the current user. To read it first, open install.ps1 in a browser.

Windows session notes

  • The host captures the signed-in session. While the machine is locked, at the sign-in screen or a UAC prompt, nothing can be captured; the host reconnects when the desktop is back.
  • Laptop lid closed: still works. With the built-in display off, the host falls back to GDI capture; motion may be less smooth than the GPU path.
  • Through Remote Desktop (RDP): the host shares the RDP session's virtual display. If you disconnect RDP, Windows drops that display and clients see black until you sign back in.
  • Settings and the PIN live in %APPDATA%\swiftdesk\host.json; the log is %LOCALAPPDATA%\swiftdesk\host.log.

2. Install the host on macOS

SwiftDesk-macOS.pkg installs the SwiftDesk app and the SwiftDesk Host app. The host is a universal build for Intel and Apple silicon, macOS 12 or later.

  1. Open the .pkg and install. If macOS cannot verify the developer: System Settings → Privacy & Security → Open Anyway.
  2. Open SwiftDesk Host. macOS asks for Screen Recording: in System Settings → Privacy & Security → Screen & System Audio Recording, enable SwiftDesk Host.
  3. On the first mouse or key event from a client, macOS asks for Accessibility: enable SwiftDesk Host under Privacy & Security → Accessibility.
  4. Restart the host (Quit from the menu bar, then open it again) so the permissions apply.
Black screen? It is almost always the missing Screen Recording permission for SwiftDesk Host. The menu-bar menu shows a ⚠ line; click it to open the right settings page.

After an update, macOS may treat the host as a new app and ask again. Open the same two panes, remove the old SwiftDesk Host entry with “−”, add it again with “+”, then restart the host. For the .pkg install the log is /tmp/swiftdesk-host.log.

3. Connecting

From the desktop app (Windows, macOS)

Windows and macOS share one app. Left-click the tray icon to open the SwiftDesk window: Your address and this computer's PIN sit at the top, with two tabs below:

  • This computer: who is connected now, paired devices, approval prompts, audit log.
  • Connect to another computer: quick connect (address[:port] and PIN) and an address book with Add, Edit, Delete, Import. Each remote computer opens in its own SwiftDesk window.

The tray menu (right-click) also has Connect to…. So a Windows PC can now control other computers without a browser.

From the Android app

  1. Tap Scan QR and scan the code in the SwiftDesk window of the computer you want to control: the app adds and pairs it.
  2. Or tap Add host, pick SwiftDesk, and enter a name and the address. The port is part of the address and optional: 192.168.1.20 or 192.168.1.20:7340. The app asks for the PIN the first time you open it.

Each entry's ⋮ menu has Edit, Duplicate, Forget pairing and Delete. Exporting and importing the address book: see section 4. iPad/iOS: coming soon.

From a browser, nothing to install

  1. Open http://192.168.1.20:7340/ in Chrome, Safari, Firefox or Edge.
  2. Pick a device name, type the PIN, click Connect. The token is kept in that browser.

With a QR code

On the host itself, the SwiftDesk window (left-click the tray icon) or http://127.0.0.1:7340/admin shows a QR code. On a phone, tap Scan QR in the app to add and pair; scanning with the camera opens the web client with the PIN filled in. On desktop or web, paste the QR link.

Which address?

Use IP addresses:

  • Same Wi-Fi or LAN: the host's local IP, for example 192.168.1.20.
  • Over Tailscale: the host's Tailscale IP (of the form 100.x.y.z). Your address in the SwiftDesk window and the tray's Address line prefer the Tailscale IP.

SSH

Add host → SSH → address (port 22 by default), user, optional password. On first connect the app shows the server key fingerprint to confirm and pins it; if the key later changes, the app warns clearly and asks you before accepting the new key. The terminal is xterm-compatible with 10 000 lines of scrollback.

4. VNC, RDP and saved passwords

VNC

The app has a built-in VNC viewer; VNC is in the app only, not in the browser. Add host → VNC → address.

  • A Mac: turn on Screen Sharing in System Settings → General → Sharing, then sign in with the Mac account name and password.
  • Standard VNC servers: enter the VNC server password.

RDP

An RDP entry stores a Windows PC's address and opens it with Microsoft's Remote Desktop / Windows App (that app must be installed). Built-in RDP inside SwiftDesk is still coming.

Saved passwords

Tick Remember password when you enter one: it is stored in the system keychain, not in the address book file.

Exporting and importing the address book

  • Hosts only: just the host list, no passwords or tokens.
  • Hosts + saved passwords (encrypted): includes saved passwords, encrypted with AES-256-GCM using a passphrase you choose. The file cannot be opened without it, so keep it safe.
  • Import detects encrypted files and asks for the passphrase. When a host already exists you choose Replace, Keep both or Skip.

5. PIN, owner and admin

  • Rotate (default): a new PIN after every successful pairing, so each PIN works once.
  • Fixed: the PIN stays until you change it, AnyDesk style. Setting a PIN in the UI switches to Fixed.
  • Owner: the first device that pairs. It gets Manage host in the app and web client: view and change the PIN and mode, change device roles, revoke devices, read the audit log. Re-pairing with the PIN always drops to the user role.
  • Ask me before anyone connects: turned on at the host computer itself (tray menu or SwiftDesk window). When a non-owner device connects, the person at the host presses Accept or Decline in the SwiftDesk window; with no answer it is declined after 30 seconds. Approval is not done from the owner's app.
  • Pause new connections: refuse new sessions, keep the open ones.
  • Revoke from the tray, admin page, owner app or cloud: that device's live sessions end at once and it must enter the PIN again.
  • Audit log: every pairing, connection, revocation, PIN change and received file goes to audit.log next to host.json.
  • Brute-force protection: 5 failures from one IP lock it out for 60 seconds; 30 failures from any IP within 10 minutes lock pairing and rotate the PIN in Rotate mode.

6. Tray icon

Icon colors: blue idle, green while someone is connected, grey when paused. A notification appears whenever a device connects.

  • Left-click: opens the SwiftDesk window: Your address and PIN at the top, a This computer tab (connected now, paired devices, approvals, audit log) and a Connect to another computer tab.
  • Right-click (Ctrl-click on a Mac): opens the menu, which shows Address and PIN; click either to copy.
Menu itemWhat it does
Connected devicesDisconnect one device or Disconnect all
Address · PINClick to copy the address (Tailscale IP first) or the PIN
Rotate / Fixed · New random PINChange the PIN mode, generate a random PIN
Ask me before anyone connectsAsk the person at the host before a non-owner device gets in
Pause new connectionsStop accepting new sessions
Open SwiftDesk…Open the SwiftDesk window
Connect to…Open the Connect to another computer tab to control another machine
Start at login · Cloud · QuitAutostart, SwiftDesk Cloud status, quit

7. In a session

The app and the web client have different toolbars. Web client: the toolbar shows while the pointer is over the picture. App: the toolbar hides after 3 seconds; tap the small ▾ handle at the top to bring it back.

App toolbar

IconWhat it does
DisconnectEnd the session
Statsfps, bitrate, encode time, round trip
Reset zoomUndo a pinch zoom
Touch modeSwitch Trackpad / Direct
KeyboardOn-screen keyboard and special-key strip
ScreenSwitch display when the host has several
QualityBitrate ceiling 2 / 8 / 20 Mbps
ManageManage the host (owner only)
View only · Lock · MuteWatch only · Lock the host · Mute
Send clipboardSend this device's clipboard to the host
SharpenRequest a fresh frame when the picture is blurry or broken

Web client toolbar

ButtonWhat it does
● colored dotNetwork quality: green (rtt under 80 ms, loss under 2 %), yellow, red
MuteMute or unmute
ManageManage the host (owner only)
View only · LockWatch only · Lock the host
SnapSave a PNG of the remote screen
SharpenRequest a fresh frame when the picture is blurry or broken
Fullscreen · KeyboardFull screen · On-screen keyboard
DisconnectEnd the session. If the network drops on its own, the web client reconnects

After a dropped connection the web client reconnects by itself; the app shows an error with a Retry button.

Mouse, keyboard, touch

The pointer maps 1:1 onto the remote screen; keys are sent as physical key codes, so Ctrl+C or Cmd+Space behave like a keyboard plugged into the host. Text from the on-screen keyboard is sent as text, so any language works. The two touch modes and pinch zoom are in the app:

Gesture (app)Trackpad (default)Direct
One-finger dragMoves the pointer like a trackpadPointer jumps to the finger
TapLeft click at the pointerLeft click at the finger
Long press (0.5 s)Right clickRight click
Long press, then dragLeft-button dragLeft-button drag
Two-finger dragScrollScroll
PinchZoom up to 4x (client side)Zoom

Clipboard and files

  • Text copied on the host reaches owner devices automatically. To send your device's clipboard to the host: press Send clipboard in the app, or Ctrl/Cmd+V in the web client.
  • Files: drag and drop them onto the picture in the web client. They land in Downloads/SwiftDesk/, up to 4 GB per file and 16 GB per session, marked as downloaded from the internet so Windows and macOS warn on open.

8. Quality and weak networks

  • Defaults: up to 60 fps, 8 Mbps ceiling, hardware encode. A static screen costs almost no bandwidth.
  • The app's Quality button: Low 2 Mbps (weak 4G), Normal 8, High 20 (video). It is a ceiling; the host still lowers it when the link cannot keep up.
  • Below about 3.5 Mbps the host drops to 75 % resolution, up to 45 fps; below 1.5 Mbps to 50 %, up to 30 fps. The floor is 500 kbps, where text stays readable.
  • The client shows “Network limited: … kbps, 75 % resolution, 45 fps”. When the link recovers the host steps back up, about one step every 5 seconds.
  • Opus audio carries FEC, so it keeps playing through packet loss. If the picture stays broken, press Sharpen.
  • Smoothest on 5 GHz Wi-Fi or Ethernet, and a direct Tailscale path (tailscale status does not say “relay”).

9. Remote access and network scope

SwiftDesk is LAN and Tailscale first. The host only accepts peers inside the chosen scope; others are refused before the PIN check:

--networkWho may connect
lan (default)Private LAN ranges and Tailscale
tailnetTailscale only. Use it on public Wi-Fi
anyEveryone. Not recommended

To reach your home computer while away: install Tailscale on both devices with the same account and use the host's Tailscale address. Do not expose port 7340 to the internet.

SwiftDesk Cloud (optional): passkey sign-in, all your hosts in one list, change PINs and revoke devices remotely, invite family members, and relay the handshake when the two machines cannot see each other. Media stays end-to-end encrypted between the two machines.

10. AI Terminal

AI Terminal gives you persistent terminals hosted by SwiftDesk on the host. It lists and resumes Claude Code, Codex and Cursor sessions grouped by project, and starts new ones: New shell, Claude, Codex or Cursor.

Opening AI Terminal

  • Browser: http://192.168.1.20:7340/term.
  • App: the host's menu → AI terminals.

Owner devices only

A terminal is full access to the machine, so only owner devices can use it. To make your device an owner: on the host, open the SwiftDesk window → Paired devices → Make owner.

How long sessions live

Closing the browser or app, or losing the network, does not end a session.

Host OSKeeps sessions inWhen the host restarts
macOS, Linuxtmux, socket swiftdeskSessions survive
WindowsConPTYSessions end; AI sessions can be resumed from the list

AI Terminal does not go through the SwiftDesk Cloud relay yet: connect directly over your LAN or Tailscale. Linux host (terminal only, no screen sharing): coming as a download.

11. Command line

The host is a single binary, swiftdesk-host. Common flags:

FlagMeaning
--pin 123456Set a fixed PIN (switches to Fixed)
--name "Office PC"Name shown in clients
--port 7340HTTP and WebSocket port
--network lan|tailnet|anyWho may connect
--fps 60, --bitrate-kbps 8000fps and bitrate ceilings
--screen 1Display shared at start
--no-audioDo not share audio
--trayRun with the tray icon
--list-clients, --revoke <id>List and revoke paired devices
--install-autostart, --uninstall-autostartStart at login on or off

12. Troubleshooting

SymptomFix
Connected but black screen (Mac)Screen Recording is missing for SwiftDesk Host. Enable it under Privacy & Security and restart the host. The log /tmp/swiftdesk-host.log says “declined TCCs”.
Black screen (Windows)The session is locked, at sign-in/UAC, or you just disconnected RDP. Sign back in; the host reconnects.
Windows laptop lid closedWorks through GDI capture, possibly less smooth. Open the lid to return to the GPU path.
Mac ignores mouse/keyboardAccessibility is missing for SwiftDesk Host.
“wrong PIN or expired pairing”Check the PIN on the right host's tray. In Rotate mode the PIN changed after the last pairing. Revoked devices must enter the PIN again.
“too many failed attempts”Wait one minute and retry.
The app shows an error after a dropPress Retry. The app does not reconnect on its own yet; the web client does.
AI Terminal says not allowedThe device is not an owner. On the host: SwiftDesk window → Paired devices → Make owner.
AI Terminal does not open through the cloudNot supported through the cloud relay yet. Connect directly over LAN or Tailscale.
Cannot connectAre both on the same LAN/tailnet? Open http://<host>:7340/api/info and check it returns JSON. Check Windows Firewall allowed it, and the --network scope.
Stuck waitingThe host may have “Ask me before anyone connects” on: the person at the host must press Accept in the SwiftDesk window (declined after 30 seconds).
Blocky or stuttering picturePress Sharpen; check the network dot (web client); lower Quality (app); use 5 GHz Wi-Fi or Ethernet.
No soundIs the host running with --no-audio? The browser may block autoplay: toggle Mute off and on.
Clipboard does not arriveOnly owners receive the host clipboard. Browsers only write the clipboard while the tab has focus.
Connect does nothingHard-reload the page (Ctrl/Cmd+Shift+R) to get the latest web client.
No tray icon (Windows 11)Open the ^ arrow on the taskbar and drag the SwiftDesk icon out.

13. Updating

  • Windows: run the new installer or the PowerShell line.
  • macOS: install the new .pkg; if macOS asks again, re-grant the permissions as in section 2.
  • Android: install the new APK over the old one.
  • The web client ships inside the host: update the host and the web client updates too.