RustDesk-Custom — Galaxy Fold 6 customization
RustDesk 1.4.6 을 fork 해 Galaxy Fold 6 한 손 사용 + 본인 전용 자동 접속 흐름에 최적화한 빌드. 공식 앱의 모든 기능 유지 + 수동 입력 0 (ID·비밀번호·키보드·viewStyle 전부 자동) + 핵심 키 8개만 남긴 컴팩트 toolbar 를 status bar 바로 아래에 다크 톤으로.
핵심 숫자
toolbar 키 개수
30+ → 8
−73%
사용자 인터랙션 (접속 까지)
3+ → 1 탭
connect 한 번
코드 라인 (KeyHelpTools)
150 → 30
−80%
APK 크기
28 MB
release + obfuscate
서명
RSA 4096
25년 유효
데이터 보존
install -r
매 빌드 유지
공식 RustDesk vs 우리 빌드 비교
| 기능 | 공식 RustDesk | RustDesk-Custom (우리) |
|---|---|---|
| 앱 이름 표시 | RustDesk | RustDesk-Custom |
| 버전 표시 | 1.4.6 | 1.4.6-custom +65 |
| 원격 Peer ID 자동 prefill | ✗ | ✓ 124083670 |
| 비밀번호 자동 prefill | ✗ | ✓ 평문 박힘 (본인 빌드) |
| 비밀번호 dialog 자동 submit | ✗ 사용자가 확인 탭 필요 | ✓ 200ms 후 자동 |
| 접속 후 loading dialog | ~3초 자동 dismiss | ✓ 첫 image 즉시 dismiss |
| 접속 후 키보드 자동 표시 | ✗ | ✓ openKeyboard 자동 |
| Modifier toolbar 키 개수 | 30+ (Ctrl·Alt·Shift·Cmd·Fn·pin·more·F1-F12·...) | 8 (Esc·Enter·←↑↓→·Cmd+C/V) |
| toolbar 위치 | 화면 상단·접기 | status bar 바로 아래 |
| toolbar 디자인 | 검정 반투명 + 흰 11pt 글씨 | 다크 카드 + 진한 11pt 글씨 + 좌측 정렬 + 컴팩트 |
| 우하단 접기 FAB | 있음 | 제거됨 |
| home_page AppBar | 있음 (~56dp) | 제거 + SafeArea |
| 한국어 IME 입력 안정성 | iOS 만 composing 처리, Android 깨짐 | ✓ multi-byte sessionInputString 통일 |
| Galaxy Auto Blocker 우회 | ✗ 사용자가 끔 필요 | ✓ ADB 명령으로 자동 통과 |
| 빌드 후 데이터 (Google 로그인·peer 설정) 유지 | 매번 uninstall 시 날아감 | ✓ install -r 데이터 보존 |
장점 (카테고리별)
접속 시간 최소화
- 앱 실행 → connect 1탭 → ~1초 후 원격 화면 + 키보드 동시 표시
- ID·비밀번호 자동 prefill + dialog 자동 submit + loading dialog 강제 dismiss
- 공식 앱 대비 약 5-8초 → 1-2초로 단축
화면 가림 최소화 + Galaxy Fold 6 한 손 친화
- 핵심 8키만 — Esc · Enter · 방향키 4개 · Cmd+C · Cmd+V
- status bar 바로 아래 1줄로 정착, 화면 상단·하단 충돌 0
- 좌측 정렬 + 컴팩트 (28×26 dp 버튼, 11pt 폰트) — 손가락 도달 거리 최소
- 접기 FAB·AppBar 제거 → 시각 노이즈 ↓
- 다크 톤 카드 — 원격 화면과 분리 명확
한국어 입력 안정성
- 공식 앱: Android 의 한글 IME 조합 (ㅎ→하→한) 중간 단계가 깨져서 전송 → "안녕하세요" → "ㅇㄴㅎ새요"
- 우리 빌드:
_handleIOSSoftKeyboardInput통일 + multi-byte 문자는bind.sessionInputString직접 호출 → 한글 commit 시점에만 전송 - 일본어·중국어 등 모든 multi-byte IME 같이 fix
빌드·배포 안정성
- 자체 keystore RSA 4096 / SHA-384 / 25년 유효 → APK signature 영구
adb install -r매 빌드 — Google 로그인 토큰 / RustDesk peer 설정 / 비밀번호 기억 모두 유지- Samsung One UI 6.1.1+ Auto Blocker (Fold 6 기본 활성) 우회 —
verifier_verify_adb_installs자동 비활성 - R8 obfuscate + tree-shake — APK 28MB (debug 165MB → release 28MB, −83%)
- Gradle JVM 4G heap + Kotlin 1.9.10 통일 + Flutter 3.22.3 — RustDesk CI 와 동일 환경
코드 품질
- KeyHelpTools state 변수 3개 (_fn/_more/_pin) → 0개 — 모드 변경 필요 없는 단일 1줄 toolbar
- 코드 라인 150 → 30 (−80%), 조건 분기 3 → 1
- 회귀 fix 후 canonical RustDesk 동작 + 우리 UI 만 — Flutter 2026 권장 패턴 (Scaffold resizeToAvoidBottomInset + Stack body Positioned bottom)
- 한국어 사용자 컨텍스트 (Galaxy + Mac) 에 맞춘 의식적 선택 (decision-matrix + 머스크 5단계 분석)
유연성
- 비밀번호·ID 만 코드 1줄 변경하면 즉시 다른 peer 자동 접속
- 같은 keystore 라 update 시 데이터 손실 없음
- iOS 빌드 path 도 확보 — vcpkg arm64-ios + cargo iOS dylib 생성 완료 (signing 만 추가하면 iPad 도 가능)
기술 스택
| 레이어 | 버전·설정 |
|---|---|
| Rust | 1.91 + cargo-ndk + target aarch64-linux-android, aarch64-apple-ios |
| Flutter | 3.22.3 (RustDesk CI 와 일치, /tmp/flutter-3.22.3) |
| flutter_rust_bridge_codegen | 1.80.1 (uuid feature) |
| cargo-expand | 1.0.95 |
| Kotlin | 1.9.10 (settings.gradle) |
| Java | 17.0.19 (Homebrew) |
| Gradle | 7.6.4 + JVM Xmx 4G |
| AGP | 7.3.1 |
| Android NDK | 28.0.13004108 |
| vcpkg native libs (Android) | aom · ffmpeg · libvpx · libyuv · opus · libjpeg-turbo · oboe · cpu_features |
| vcpkg native libs (iOS) | aom · ffmpeg · libvpx · libyuv · opus · libjpeg-turbo (IPHONEOS_DEPLOYMENT_TARGET=14.0) |
| iOS deployment target | 14.0+ (___chkstk_darwin symbol 보장) |
| Keystore | RSA 4096 / SHA-384 / 25년 / ~/.android-keystores/rustdesk-custom.jks |
| APK signing | v2 signature, alias rustdesk-custom |
커밋 히스토리 (RustDesk fork)
| commit | 요약 |
|---|---|
03b4790 | 원격 접속 자동화 — 비밀번호 dialog 자동 submit + loading dismiss + 자동 키보드 |
72c5e3f | KeyHelpTools 위치 맨 위 (status bar 바로 아래) |
3ebb7dd | 회귀 fix — auto hooks + Column/Positioned.fill revert (ImagePaint 회색 회귀 해결) |
593e7ca | ⑦ Galaxy Fold 6 customization 메인 — toolbar 8키 + 자동 prefill + 2026 layout |
d0d034b | 이름·버전 (RustDesk-Custom, 1.4.6-custom) |
알려진 한계 + 향후 개선
| 한계 | 대안 / 향후 |
|---|---|
| APK reverse engineering 시 비밀번호 평문 노출 | SharedPreferences encrypted 또는 RustDesk peer "비밀번호 기억" 기능 + install -r 만으로 동등 효과 가능 (안전) |
| Galaxy Auto Blocker 끄지 않으면 첫 설치 시 차단 | ADB 1회 명령으로 우회 적용 ⇒ 자동화됨 |
| iPad iOS 빌드 — signing 자동화 어려움 | Xcode UI Personal Team 1회 설정. Apple ID 가입만 필요 (무료, 7일 만료) |
| 임의 modifier 조합 (Ctrl+Z, Cmd+S, Shift+Tab 등) 입력 불가 | BT 키보드 사용 또는 modifier 1개만 추가 도입 (Phase 1 분석에서 의식적 trade-off) |
| 마우스 모드 + 키보드 없을 때 Esc 입력 불가 | 화면 한 번 탭으로 키보드 호출 (사용자 의식적 수락) |