생각보다 재미있는 프로그램이 나왔습니다.
아니 그동안 그냥 제가 몰랐던거에 가까운거지요.
winlator라는 안드로이드 앱입니다.
방식은 Box64(https://github.com/ptitSeb/box64)
GitHub - ptitSeb/box64: Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64, RV64 and LoongArch Linux device
Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64, RV64 and LoongArch Linux devices - ptitSeb/box64
github.com
를통해 ARM에서 AMD64를 에뮬레이팅하고
해당 에뮬레이팅 환경위에서 Wine을 구성해서 Windows 프로그램을 돌리는 것입니다.
그리고 Windows 프로그램을 돌리는 이유중 하나는 DirectX다보니 DXVK나 WineD3D같은 호환 레이어를 통해 GPU가속을 진행합니다.
쉽게 말해서 Wine을 Box64와 최소한의 X11 에서 돌리면서 DXVK를 통해 스마트폰의 Vulkan환경에 직접 접근하는 방식입니다.
꼭 Vulkan이 아니더라도 Wine에서 구동이 된다면 스마트폰에서도 느리게나마 구동이 가능하다는 의미입니다.
공식 github는 https://github.com/brunodev85/winlator
GitHub - brunodev85/winlator: Android application for running Windows applications with Wine and Box86/Box64
Android application for running Windows applications with Wine and Box86/Box64 - brunodev85/winlator
github.com
여기지만 대부분 사람들은 공식 Winlator대신 MOD버전을 이용한다고 하더군요.
저부터도 glibc버전이 달라진 https://github.com/ajay9634/winlator-ajay
GitHub - ajay9634/winlator-ajay: Android application for running Windows applications with Wine and Box86/Box64
Android application for running Windows applications with Wine and Box86/Box64 - ajay9634/winlator-ajay
github.com
이 MOD를 이용하고 있습니다. 왜냐하면 최신 Wine환경에서 glibc버전의 영향이 크거든요. 최신버전의 Wine을 위해선 아무래도 glibc가 같이 버전이 어느정도 되어야 합니다. 특히 Proton같은 변형 Wine을 쓴다면 더더욱 glibc가 필요합니다. 그리고 무엇보다 해당 버전은 MIDI가 지원됩니다. 고전게임에선 MIDI가 주로 이용되었으니까요.
한번 저는 여기에서 고전게임을 한번 실행해 보도록 하겠습니다. 다만 가능하면 인스톨이 대신 기존 설치된 게임을 복사해서 쓰는걸 추천합니다. 레지스트리 입력을 자동으로 해주는 게임도 있습니다. (디스크스테이션 게임이 대표적)
우선 설치를 해야겠지요. APK를 이용해서 설치하는건 따로 알려드리지 않습니다.
https://github.com/ajay9634/winlator-ajay/releases
Releases · ajay9634/winlator-ajay
Android application for running Windows applications with Wine and Box86/Box64 - ajay9634/winlator-ajay
github.com
전 여기서 winlator-ajay 7.1.2을 쓰고 있습니다. 내장된 Wine은 9.0을 기반으로 한 커스텀 버전입니다. 그럭저럭 최신버전입니다.
처음 설치하면
이렇게 뜨면서 시스템파일을 설치합니다. X11과 Box64, 그리고 내장된 Wine 을 설치하는 중입니다.
그리고 나면 Containers라는 화면이 뜹니다. 그리고 왼쪽 위에는 햄버거 버튼이 있어서 이것 저것 확인이 가능합니다.
Docker를 써보셨으면 Container 개념이 바로 잡히실겁니다. 각 Container는 일종의 Wine Prefix 역할을 합니다. Playonlinux나 Lutris를 통해 각 프로그램별로 환경을 갖추는 바로 그걸 의미 합니다.
저는 이미 이것저것 설치해둔 터라 뭔가가 많이 있습니다만 처음 시작하면 아무것도 없을 겁니다. 오른쪽 위에 +를 눌러봅시다.
Name은 Container 이름이며 사이즈는 우선 720p로 그대로 두는걸 추천합니다. 해상도가 높으면 구동시 버벅임이 심해지고 너무 작으면 창이 밖으로 넘어가는 불상사가 일어납니다.
Wine Version이야 당연히 Windows 호환 레이어의 버전입니다. 특정 프로그램의 경우 구버전에서 잘 돌아가는 프로그램도 있지만 우선 내장된 버전이 이것이니 이걸 그대로 이용합시다.
그리고 Graphic Driver 이게 중요한데 스냅드래곤 칩셋의 경우 Turnip이 꽤 좋은 퍼포먼스를 보여줍니다. 특히 DXVK를 쓸 수 있어서 Vulkan을 쓰므로 상당히 좋은 모습을 보입니다. 다만 호환성은 반대로 떨어집니다. 이건 PC리눅스에서도 마찬가지였습니다.
VirGL은 호환성이 상당히 좋은 드라이버입니다. Qemu등에서 쓰이는 드라이버로 PC에선 상당히 좋은 모습을 보여주지만 Vulkan이 작동되지 않습니다. WineD3D를 통해 OpenGL로 구동해야 합니다. 웃긴건 삼성 최신 칩셋에서는 Vulkan성능이 상당히 좋은 GPU가 들어갔음에도 VirGL을 통해 OpenGL을 써야하는 뭔가 안타까운 상황입니다. 개발이 지속되면 삼성칩셋에서 Vulkan이 구동될 수도 있을겁니다만 아직은 아닙니다.
만약 굉장히 오래된 고전게임을 구동한다면 개인적으로 VirGL을 쓰는걸 추천합니다. DXVK가 구형 API를 지원 못하는 관계로 쓰나마나인 경우가 잦습니다. dgVoodoo같은 레이어를 쓰기도 하는데 스마트폰에선 퍼포먼스가 PC에 비해 떨어지는 관계로 CPU 발열이 엄청나더군요. 차라리 WineD3D를 써서 CPU부담을 줄이는걸 추천합니다. 어차피 고전게임들은 그렇게 많은 성능을 요구하지 않습니다.
MIDI SoundFont는 MIDI를 구동할때 필요합니다. MIDI를 사용한 게임(뿌요뿌요2, 환세취호전 등)을 쓰신다면 이걸 켜주시면 음악을 들을 수 있습니다. 심지어 윈도우 기본 폰트보다 상당히 좋은 품질이 나옵니다.
그 외에 Drives를 추가해서 스마트폰의 외부에 접근이 가능하게 할 수 있습니다. 참고로 기본 설정은 D드라이브가 스마트폰의 다운로드 폴더입니다. 보통은 기본으로 두는 편입니다.
그리고 오른쪽 아래의 체크를 누르면 컨테이너가 생성됩니다.
이제 여기서 재생버튼(?)을 누르면
윈도우와 흡사한 화면이 나오면서 파일탐색기가 같이 뜹니다. 그리고 터치패드를 이리저리 문지르다보면 마우스포인터가 노트북 터치패드 처럼 움직인다는 것을 알 수 있습니다.
네, 터치스크린 방식이 아닌 노트북 터치패드처럼 쓴다고 생각해야 합니다. (물론 터치스크린처럼 쓸 수도 있습니다만 작은 파일을 선택하거나 하기엔 답답하기에 이게 더 편할 수 있습니다.)
사실 이 화면은 Wine Desktop화면입니다.
제가 사용하는 ajay모드 버전을 쓰신다면 fix wfm launch를 한번 해주시는걸 추천합니다. 가끔 Wine Desktop에서 밖으로 빠져나가서 따로 실행되는 프로그램들이 있습니다. 일반 리눅스 데스크탑이라면 알아서 따로 열린창으로 작업이 가능하지만 우린 Wine Desktop만으로 작업을 해야하니 난감한 상태가 됩니다. 이 설정은 해당 문제를 방지해줄 수 있습니다.
그리고 D:를 통해서 아까 설정한 스마트폰 내의 다운로드 폴더에 접근이 가능합니다. 만약 아무것도 안 뜬다면 컨테이너를 닫은다음 Drives 설정으로 들어가서 접근 허용해주시면 됩니다.
즉, 이제 필요하다면 다운로드 받은 프로그램을 D드라이브에서 복사해서 가져오거나 직접 실행하는 방식으로 해당 컨테이너에서 굴릴 수 있게 된다는 의미입니다.
다만, Wine에서도 그렇게 삽질이 동반되었는데(그동안 제가 해왔던 삽질을 생각해보자면...)여긴 아키텍처가 다르니 일부 그냥 돌아가는 프로그램들을 제외하면 더했으면 더했지 덜 하지는 않을겁니다.
뒤로 버튼을 한번 누르면 세로모드로 바꾸거나 키보드를 소환하거나 닫아 버릴 수도 있습니다. Input Control을 통해 가상 버튼을 만들어서 게임에서 써먹을 수도 있습니다. 만약 멈춰버려서 말을 안 듣거나 하면 Task Manager를 통해 특정 프로그램을 닫을 수도 있습니다. Exit는 당연히 해당 컨테이너를 닫아버리는 기능이겠지요.
참고로 컨테이너를 닫은 다음 시간이 어느정도 지나야 완벽히 닫깁니다. Box64 서비스가 내려가는 시간이 꽤 걸리는 듯 합니다. 이것도 리눅스가 셧다운 될때 꽤 시간이 걸린다는걸 생각해보시면 될 듯 합니다.
아마 다음에는 고전게임중 하나인
이걸 해볼까 합니다. 가상버튼들이 뭔가 이상한데 이건 다른 게임용으로 만든 버튼이 튀어나온 탓입니다.(...)
이건 꽤 삽질이 많이 동반 되었기에 이정도의 삽질은 해야 게임이 된다는걸 보여줄 수 있을것 같거든요.
'안드로이드 삽질기 > 안드로이드용 에뮬레이터 이야기' 카테고리의 다른 글
Winlator로 프린세스메이커3 돌리기 (0) | 2025.03.09 |
---|---|
안드로이드용 에뮬레이터이야기 - 4. Playstation에뮬레이터 이야기. (0) | 2017.04.25 |
안드로이드용 에뮬레이터이야기 - 3. PPSSPP PSP에뮬레이터 (0) | 2014.08.01 |
안드로이드용 에뮬레이터이야기 - 2. Drastic과 nds4droid (3) | 2014.07.30 |
안드로이드용 에뮬레이터이야기 - 1. aFBA (0) | 2014.07.27 |