Dolphin이란 에뮬레이터가 있습니다. 한때 시대를 풍미했던 그리고 전설의 판매량을 기록했던 닌텐도Wii의 에뮬레이터입니다.

오픈소스로 개발되고 있고 지금도 활발히 개발중입니다.

 

다만, 원 개발진들이 상당히 보수적이라 이에대한 Fork인 Ishiiruka란 변종버전도 함께 개발중입니다. 일종의 갈래죠. 

 

이 에뮬레이터는 상당한 성능과 재현성을 보여주고 있어서 많은 사람들이 애용중입니다.

 

다만, 게임기 특성상 Wii리모컨을 필요로 합니다. 그래서 이를 스마트폰으로 대체하는 UDPMote라는 것이 있었습니다. 단, 4.0버전 까지만요.

 

5.0부터는 UDPMote에 대한 개발이 발전이 없다고 없애버렸습니다. 하지만 Wiimote가 없는 사람들은 답이 없었습니다. 그래서 구버전인 4.0을 쓰거나 오픈소스라는 것에 착안하여 UDP소스코드를 다시 넣어서 돌리는 경우가 있습니다.

 

https://github.com/YellowAfterlife/Ishiiruka-but-with-UDPMote-again

 

YellowAfterlife/Ishiiruka-but-with-UDPMote-again

An adaptation of https://github.com/kevlahnota/Ishiiruka for the current version of Dolphin-Ishiiruka - YellowAfterlife/Ishiiruka-but-with-UDPMote-again

github.com

바로 이런 식으로 말이죠. 변종인 Ishiiruka에 UDPMote를 적용한 소스코드입니다. 그런데... 개발자분이 Windows만 신경쓰는 바람에 리눅스에서 빌드하는데 한참 고생했습니다.

 

우선 안드로이드 앱인 UDPMote는 https://drive.google.com/uc?export=download&id=0B6t1zFfzfaYNRHFyUzlaV3JVTk0

혹은

UDPMote_1.0.apk
0.15MB
UDPMote_1.01.apk
0.15MB

여기서 받을 수 있습니다. 사용법은 나중에 따로 찾기로 하고 지금은 리눅스에서 삽질한 내용을 기록하기 위함이니 이쪽을 먼저 하겠습니다.

 

 

우선 우분투 18.04 기준으로 CMake의 버전을 올렸어야 했습니다. 우분투18.04의 기본 CMake는 3.10인데 2020년 현재 최신 버전은 3.17입니다. 철지난 Python2가 아직도 메인이라면 그냥 쓰셔도 되지만 지금은 Python3시대죠. 

 

그래서 Python3를 우선 기본으로 바꿉니다. 터미널을 열고

 

update-alternatives --install /usr/bin/python python /usr/bin/python3 10

 

그러면 CMake의 버전이 이제 문제를 일으킵니다.

 

우선 기본 CMake를 삭제합니다.

 

sudo apt remove cmake

 

그리고https://cmake.org/download/

 

Download | CMake

Current development distribution Each night binaries are created as part of the testing process. Other than passing all of the tests in CMake, this version of CMake should not be expected to work in a production environment. It is being produced so that us

cmake.org

여기서 소스코드를 다운로드 받아서 설치해야 합니다.

cmake의 tar.gz를 다운로드 받아 압축을 풀고 압축푼곳으로 들어가 터미널에서

./configure

make

make install

 

만약 쉽게 삭제를 하고 싶으시다면 make install 대신 checkinstall을 쓰셔도 됩니다. 그러면 deb파일로 설치를 하기 때문에 apt remove cmake로 삭제가 가능합니다.

 

이제 드디어 Dolphin의 빌드를 시작해봅시다. 우선은 git이 필요하겠군요.

그냥 Dolphin에서 필요한 패키지를 다 설치합시다.

 

https://wiki.dolphin-emu.org/index.php?title=Building_Dolphin_on_Linux#16.04_LTS

 

Building Dolphin on Linux - Dolphin Emulator Wiki

Note Outdated: This has not been updated since July 2019 an no longer aligns with Dolphin's current dependencies. Users running Linux distros have to build Dolphin from source. Dolphin is compatible with x86-64 and AArch64 Linux distributions. This is a gu

wiki.dolphin-emu.org

여기에 필요한 것들이 써있군요. 그런데 16.04? 알게뭔가요. 그냥 설치합시다.

대신 CMake는 아까 위에서 설치했으니 빼고 개발버전은 WX가 같이 소스코드에 있으니 이걸 쓰랍니다.

 

그러면 필요한 패키지를 설치하는 명령어는

sudo apt install pkg-config git libao-dev libasound2-dev libavcodec-dev libavformat-dev libbluetooth-dev libenet-dev libgtk2.0-dev liblzo2-dev libminiupnpc-dev libopenal-dev libpulse-dev libreadline-dev libsfml-dev libsoil-dev libsoundtouch-dev libswscale-dev libusb-1.0-0-dev libxext-dev libxrandr-dev portaudio19-dev zlib1g-dev libudev-dev libevdev-dev "libpolarssl-dev|libmbedtls-dev" libcurl4-openssl-dev libegl1-mesa-dev libpng-dev qtbase5-private-dev

이거겠군요.

 

그리고 Wine과 각종 패키지 충돌을 경험한 뒤에 sudp apt -f 로 다시 잡았습니다. 에라이...

PPA사용할 때는 역시 패키지 충돌을 조심해야 합니다. 

 

이제 git으로 소스코드를 다운로드 받습니다.

git clone github.com/YellowAfterlife/Ishiiruka-but-with-UDPMote-again.git

 

그리고 Readme.md를 보니 

mkdir build

cd build

cmake ..

make

make install

 

이렇게 하라는군요.

 

그대로 합시다. 당연히 에러납니다.

xlocale.h가 없다네요.

locale.h를 xlocale.h로 링크 겁시다.

 

ln -s /usr/include/locale.h /usr/include/xlocale.h

 

이번에는 UDP관련 라이브러리가 없답니다. 소스코드를 보니 개발자가 Windows용으로만 수정해서 CMakeList에는 해당 파일이 없습니다.

Source/Core/Core/CMakeList.txt를 열어서 

add_library(core 안 어딘가에 

UDPTLayer.cpp

 

이렇게 한줄을 적읍시다. 그리고 UDPTLayer.cpp라는 빈파일을 하나 만듭시다.

 

그리고

Source/Core/DolphinWX/CMakeLists.txt

여기에

UDPConfigDiag.cpp

한줄을 넣어줍니다.

 

그 다음에는 

Source/Common/InputCommon/CMakeList.txt를 열고

UDPWiimote.cpp

UDPWrapper.cpp

 

두줄을 추가합시다. 이제 다시 make!

 

이번에는 wx에서 에러가 납니다. 아니!!! 내장되어 있어서 문제 없다며!!!

빌드는 되는데 include에서 문제가 일어납니다.

 

소스 루트 위치에서

 

Externals/wxWidgets3/include/wx 를 /usr/local/include로 링크를 걸어버리면 해결됩니다.

ln -s $(pwd -P)/Externals/wxWidgets3/include/wx /usr/local/include

 

이제 또 에러가 납니다. setup.h를 못 찾는 답니다.

이건 

Externals/wxWidgets3/wx 여기 있네요. 아까 링크 건 곳으로 파일들을 다 링크 겁시다.

ln -s $(pwd -P)/Externals/wxWidgets3/wx/setup.h /usr/local/include/wx/setup.h

ln -s $(pwd -P)/Externals/wxWidgets3/wx/wxgtk.h /usr/local/include/wx/wxgtk.h

 

이번에는 100%찍고 에러가 납니다.

이젠 그만 보고 싶다

마음같아서는 포기하고 싶은데 wx관련해서 레퍼런스가 없는 것 같습니다! 즉, WX를 다시 빌드해야 할 것 같네요.

 

가만보니 WX쓰는 애들이 <wx/window.h>를 include를 하나도 안 했네요. FromDIP함수가 계속 걸리는데 이게 wxWidget3.1.0부터 만들어진거랍니다. 아무래도 소스 업데이트가 덜 된듯.

 

그래서 FromDIP함수 쓰는 것들 싹다

#include <wx/window.h>

한줄 추가해줬습니다.

 

이제 좀 돌아가려나...?

 

wxWidgets 3.1.0이 자꾸 링크가 안 되서 wxWidgets 3.1을 직접 시스템에 설치하기로 했습니다. CMake에 이어서 이쯤되면 거의 Arch나 Gentoo쓰는 느낌이네요.

 

https://www.wxwidgets.org/downloads/

 

Downloads - wxWidgets

Header Files 32-Bit (x86) Development Files Release DLLs 64-Bit (x86_64) Development Files Release DLLs

www.wxwidgets.org

여기에 가면 우분투용 패키지를 따로 제공하고 있습니다. 이것을 이용합시다

 

https://wiki.codelite.org/pmwiki.php/Main/WxWidgets31Binaries#to

 

CodeLite IDE | Main / WxWidgets31Binaries

wxWidgets 3.1 Packages and Repositories This page is for the latest development release, wx3.1.3. For the previous development release, wx3.1.2, see WxWidgets312Binaries. For the latest stable release, wx3.0.4, see WxWidgets30Binaries. The CodeLite package

wiki.codelite.org

sudo apt-key adv --fetch-keys https://repos.codelite.org/CodeLite.asc

sudo apt-add-repository 'deb https://repos.codelite.org/wx3.1.3/ubuntu/ bionic universe' 

이건 18.04를 기반으로 한것이니까 bionic 부분은 버전에 맞게 잘 수정해야 합니다.

 

그리고 

sudo apt-get install libwxbase3.1-0-unofficial3 \
                 libwxbase3.1unofficial3-dev \
                 libwxgtk3.1-0-unofficial3 \
                 libwxgtk3.1unofficial3-dev \
                 wx3.1-headers \
                 wx-common \
                 libwxgtk-media3.1-0-unofficial3 \
                 libwxgtk-media3.1unofficial3-dev \
                 libwxgtk-webview3.1-0-unofficial3 \
                 libwxgtk-webview3.1unofficial3-dev \
                 libwxbase3.1-0-unofficial3-dbg \
                 libwxgtk3.1-0-unofficial3-dbg \
                 libwxgtk-webview3.1-0-unofficial3-dbg \
                 libwxgtk-media3.1-0-unofficial3-dbg \
                 wx3.1-i18n \
                 wx3.1-examples

있는대로 다 설치해서 때려박습니다.

 

다시 build 폴더를 비운다음 cmake 부터 다시 합니다.

 

이번에는 WxUtils.cpp에 wxdisplay()가 없답니다. 자세히보니 wx/display.h를 include 안 했네요. (대체 이걸 어떻게 빌드하라고..)

 

Source/Core/DolphinWX/WxUtils.cpp에 한줄을 추가합시다

#include <wx/display.h>

 

이번에는 wxDisplay(0) 이렇게 써있는 부분이 모호하다고 합니다. 포럼을 찾아보니 unsigned int로 강제형변환 해주면 된다고 하네요.

https://github.com/FasterMelee/FasterMelee-installer/issues/58

 

Build on NixOS fails: `wxDisplay(int)` is ambiguous · Issue #58 · FasterMelee/FasterMelee-installer

The build fails at 100%. The problem seems to be here: FasterMelee-installer/FasterMelee-5.9/Ishiiruka/Source/Core/DolphinWX/WxUtils.cpp:156:32: error: call of overloaded ‘wxDisplay(int)’ is ambigu...

github.com

이런 부분이 2군데 있다 싹 찾아보자

이쯤되니 슬슬...빡치려는 찰나...

어? 빌드 다 됐답니다.

이것을 보기위해 얼마나 많은 삽질을 했던가...

아아.. 드디어 빌드 되었습니다. 

그리고 portable하게 만들기 위해서 build 폴더 안에서

cp -r ../Data/Sys/ Binaries/

touch Binaries/portable.txt

 

이렇게 하고 ishiikura를 실행하면 같은 폴더에 설정파일이 만들어져서 편리합니다.

아아... 드디어!!!! 삽질의 마지막을 봤습니다!!! Wx3.1을 설치하고 개삽질을 하고 드디어..뭔가 되는 순간???

 

응??? UDPMote가 작동을 안해??

 

그래서 포럼을 뒤져보니..누가 이미 수정해 놓았네요? 그것도 리눅스용으로??? (그것도 어제...)

https://forums.dolphin-emu.org/Thread-unofficial-udpmote-for-android?page=7

 

[Unofficial] UDPMote for android

 

forums.dolphin-emu.org

https://github.com/Oneirag/Ishiiruka-but-with-UDPMote-again

 

Oneirag/Ishiiruka-but-with-UDPMote-again

An adaptation of https://github.com/kevlahnota/Ishiiruka for the current version of Dolphin-Ishiiruka - Oneirag/Ishiiruka-but-with-UDPMote-again

github.com

 

야..야잇!!!!

 

내가한 2일간의 삽질은 뭐냐는 말이냐... 괜찮아요.. 괜찮아.. 그래도 나름 공부는 되었잖아요.... 젠장

 

구동 결과...

 

build/Binaries/User/Config/WiimoteNew.ini 파일의 내용을 다음과 같이 바꿉시다.

[Wiimote1]
Source = 1
UDP Wiimote/Port = 4434
UDP Wiimote/Enable = 1
UDP Wiimote/ShowMessageBox = 1
[Wiimote2]
Source = 0
[Wiimote3]
Source = 0
[Wiimote4]
Source = 0
[BalanceBoard]
Source = 0

 

만약 2P 3P를 원한다면 [Wiimote2]부분을

Source = 1
UDP Wiimote/Port = 4435
UDP Wiimote/Enable = 1
UDP Wiimote/ShowMessageBox = 1

 

이런식으로 바꿔주시면 됩니다. PC와 스마트폰은 같은 공유기에 연결되어야 합니다. 어차피 UDP통신이라 iptime 정도면 충분합니다.

Wii버전 팡야 해보는데 생각보다 재밌네요. 스마트폰을 직접 휘두르는 느낌도 들고 Wii가 괜히 많이 팔린게 아닌 것 같습니다. 캐주얼한 것은 최고네요. 그래픽이 안 좋은 것은 필터로 때울 수 있고요.

댓글을 달아 주세요

보통 여러분들은 모바일 브라우저 무엇을 쓰시나요?

대부분은 Chrome을 쓰고 계실겁니다. 삼성인터넷이나 돌핀도 괜찮지만 아무래도 많은 사람들이 쓰는 브라우저가 편하죠.

 

 

그리고 요즘에는 모바일 디스플레이가 AMOLED를 주로 채용하고 있고 PC용 모니터도 OLED로 가는 추세입니다. 그런데 OLED의 단점이 바로 번인현상입니다. 소자의 수명문제로 특정 모양의 무늬가 잔상으로 남는 현상인데 OLED는 이런 문제가 심각한 편입니다. 요즘 스마트폰의 수명은 대략 3년이 한계고 그 전에 바꾸는게 대다수지만 저는 4~5년은 거뜬히 쓰기 때문에 조금은 아깝습니다.

 

그리고 PC용 모니터는 10년이고 20년이고 쓰는 경우가 많아서 더욱 수명이 중요하고요. LCD는 이런면에서 자유롭지만 색재현율의 한계가 OLED가 더 좋다보니 Windows에서도 다크모드가 생겼습니다.

 

안드로이드10을 쓰고 있다면 다크모드의 사용이 가능한데요. 모든 앱이 다크모드로 되는 것은 아니지만 기본적인 앱은 다크모드를 쓸 수 있습니다. 그건 Chrome도 마찬가지입니다.

 

하지만 웹페이지는 다크모드로 한다고 해도 원래색 그대로 나옵니다. CSS로 설정된 그 색을 쓰는 것이기에 웹개발자가 신경쓰지 않으면 그 색 그대로 쓸 수밖에 없습니다.

 

Chrome에서는 이에따라 강제 다크모드를 쓸 수 있는 옵션을 준비했습니다. 다만, 실험실기능이니 언제 없어질지 알 수없습니다.

 

방법은 다음과 같습니다.

크롬을 열고 주소창에 다음과 같이 적습니다.

Chrome://flags

 

 

이러면 실험실기능화면이 뜹니다. 그 다음 검색버튼을 누르고 Force Dark Mode를 검색하면

 

 

Force Dark mode for Web Content라고 뜹니다.

지금은 Disable로 되어있는데 이것을

 

 

Enabled with Selective Inversion of non-Image elements

 

이것을 선택합니다. 때에 따라서 이미지가 반전되기도 하기 때문에 그것을 막기위한 조치입니다.

 

그리고 크롬을 껐다 다시 켜면? (아래의 Relaunch를 눌러도 됩니다.)짜잔! 다크모드로 인터넷이 가능해졌습니다!

 

 

시꺼면 화면이 싫으시다고요? 대신 여러분의 스마트폰의 수명은 더욱 길어질거에요!

댓글을 달아 주세요

Virtualbox는 리눅스 데스크탑을 사용한다면 싫어도 써야하는 물건입니다. 그 이유야 당연히 Windows환경을 요구하는 경우가 은근히 있기 때문이지요. Wine으로 해결이 가능한 부분도 많지만 Windows 시스템 그 자체를 원한다면 어쩔 수 없습니다. 보통 궁극의 해결책이라고 표현하지요.

 

특히 유용한 기능중 하나가 USB Passthrough 기능입니다. 리눅스를 통하지 않고 바로 USB장치를 가상머신에 연결하게 해서 Windows드라이버만 지원하는 장치를 돌아가게 하거나 직접 Windows에서 작업 가능하도록 짜인 장비를 연결하는데에 이용가능합니다.

 

2015년에는 VirtualBox에 주로 WindowsXP를 사용했다면 이후 2019년까지는 Windows7이 그리고 2020년 현재에는 주로 Windows10이 가상머신에 이용되고 있습니다. 그런데 USB3.0을 지원하지 않는 WindowsXP는 그렇다 치는데 Windows7에서 USB장치가 인식이 안 되는 경우가 왕왕 있습니다.

 

보통 VirtualBox에 USB장치를 연결하는건 이런식으로 연결할 것이다. 실수로 USB키보드나 마우스를 연결하지 않도록 하자. 지옥을 맛 볼 수 있다.

우선 확인해주셔야 할 것은 버전에 맞는 Extension Pack을 설치했는가 입니다.

https://www.virtualbox.org/wiki/Downloads

이곳에 가셔서 VirtualBox Extension Pack을 찾아 다운로드 받아주셔야 합니다.

 

영어를 몰라도 대충 알아서 찾아 가도록 하자

이것을 설치해 주시면 USB장치를 지원이 할 수 있게 됩니다.

 

그 다음은 리눅스에서의 권한 문제입니다.

리눅스에서 사용자가 VirtualBox사용 권한을 얻어야 하는데 이를 설정하지 않으면 작동하지 않습니다.

그건 다음 링크에서 확인이 가능합니다.

https://moordev.tistory.com/205

 

VirtualBox사용시 USB 인식이 안 될 때

VirtualBox는 리눅스에서 다들 이용하고 계실 겁니다. 윈도 프로그램을 실행할 때 가장 마지막으로 시도하는 방법으로 다들 이용하고 계시지요. 그런데 VirtualBox를 쓸 때 USB가 인식이 안 되는 경우��

moordev.tistory.com

그런데도!!! 아직도!!! 인식이 안 된다면!!!!

 

그렇다면 한번 USB설정을 살펴봅시다.

우선 Windows장치의 설정으로 들어갑니다.

그리고 USB를 보시면 USB 2.0(EHCI) 컨트롤러 혹은 USB 3.0(xHCI)컨트롤러 둘 중 하나가 체크되어 있을 것입니다. 만약 1.1이라면 당장 바꾸세요. 지옥의 속도를 경험하게 됩니다.

 

여기서 한가지 알 수 있는 것은 USB 1.1에서는 인식이 되는데 2.0이상일 때 인식이 안 되거나 혹은 2.0은 되는데 3.0이 안 되는 경우가 있다는 것입니다.

 

이 것은 Windows 문제입니다. Chipset Driver나 USB드라이버가 설치되어 있지 않아서 벌어진 일입니다. 

Windows를 설치한 다음 우리는 보통 업데이트를 바로 돌려버리거나 알아서 업데이트를 하는데 이때 장치 드라이버가 자동으로 설치됩니다. 그런데 VirtualBox에서는 장치인식문제로 드라이버가 자동으로 설치되지 않는것입니다.

 

그렇다면 수동으로 설치하면 된다는 의미겠지요.

https://downloadcenter.intel.com/download/22824/Intel-USB-3-0-eXtensible-Host-Controller-Driver-for-Intel-8-9-100-Series-and-Intel-C220-C610-Chipset-Family

 

Download Intel® USB 3.0 eXtensible Host Controller Driver for Intel® 8/9/100 Series and Intel® C220/C610 Chipset Family

Intel® USB 3.0 eXtensible Host Controller Driver for Intel® 8/9/100 Series and Intel® C220/C610 Chipset Family

downloadcenter.intel.com

여기 있는 이 드라이버를 설치하거나

 

https://downloadcenter.intel.com/download/22904/Intel-USB-3-0-eXtensible-Host-Controller-driver-for-S1200V3RP?wapkw=USB

 

Download Intel® USB 3.0 eXtensible Host Controller driver for S1200V3RP

Intel® USB 3.0 eXtensible Host Controller driver for S1200V3RP

downloadcenter.intel.com

이 드라이버를 설치하면 됩니다.

 

만약 Windows10환경에서 안 된다면 그냥 Windows Update에서 한번 싸아악 돌리면 해결됩니다!

댓글을 달아 주세요