여기서 GE-proton의 tar.gz파일을 다운받습니다. 이쪽은 업데이트가 잦으므로 최신판일 수록 좋습니다.
그리고 우분투를 비롯한 리눅스에서 숨김파일을 보이게 합니다. 단축키는 보통 Ctrl+H 입니다. 그리고 .steam 폴더를 찾아 들어갑니다. (스팀이 설치 되어 있을 때 설치가 안 되어 있다면 한번 설치하고 로그인까지 해두시면 됩니다.)
compatibilitytools.d 라는 폴더를 만들거나 이미 있다면 해당 폴더로 들어갑니다.
그리고 여기에 아까 다운로드 받은 GE-proton의 압축을 풉니다.
그러면 compatibilitytools.d/GE-proton-X-XX 형태의 폴더가 만들어 질 것입니다. 그리고 스팀을 다시 껐다가 켭니다. 정 모르겠으면 그냥 컴퓨터를 껐다 켭시다
그리고 스팀을 켜고 라이브러리에서
DJMAX RESPECT V의 오른쪽 버튼을 눌러 속성에 들어갑니다.
그리고 호환탭에 들어가면 강제로 Steam 플레이 호환도구 사용하기를 체크하시면 GE-Proton을 선택할 수 있게됩니다.
이제 DJMAX를 실행하면 깨끗하게 실행이 됩니다!!!!
스팀덱이후로 리눅스 게이밍이 상당히 좋아지네요...
22.07.25 Proton-GE를 굳이 설치하지말고 스팀에서 Proton 7.0이상을 쓰면 아무 문제없이 실행됩니다.
이제 더 이상의 삽질은 없습니다. 그냥 DJmax를 설치하고 실행버튼만 누르면 끝입니다.
====22.09.21========
성능이슈가 있어서 이리저리 돌려보다가 알아냈습니다. 조금이라도 성능을 뽑아내기 위한 설정법입니다.
우선 스팀에서 DJMAX RESPECT V에 속성으로 들어갑니다.
그리고 시작옵션에 다음과 같이 적습니다.
DXVK_FRAME_RATE=60 %command% -force-d3d12
이렇게 하면 48프레임 나오던것이 52프레임정도로 조금 상승합니다. 이 성능문제는 안티치트가 문제라고 하는데 안티치트를 해제할 수가 없으니 억지로 성능을 끌어올리는 방법입니다. 물론 성능이 좋다면 DXVK_FRAME_RATE를 조정해주셔도 됩니다. 게임내에 프레임고정기능이 있지만 사실상 정상적으로 작동하지 않아서 사용하는 방법입니다.
23. 7. 16 성능이슈가 해결되었습니다
원인은 정확히 모르지만 NTUserDisplayConfig 함수가 문제였습니다
기존에는 User32에 함수를 했는데 User32가 아닌 win32u에 들어있는 함수를 사용해야 정상적으로 된다는군요.
다만 glibc의 버전이 2.37이상에서 작동될겁니다. (제가 사용하는 환경(Debian unstable)에서 컴파일 하다보니 그렇게 됐습니다.) 일단 위의 방법대로 compatibilitytools.d 폴더에 압축을 푸는 방식으로 설치하시고 강제로 호환성 체크를 해주세요.
아마도 해당 패치가 머지가 될것으로 보이니 이후에 정식 업데이트된 후에는 정상적인 게임이 가능할 겁니다.
스팀은 Proton이라는 윈도우 호환레이어를 제공하고 있어서 리눅스에서도 쉽게 윈도우 전용 게임을 실행 할 수 있습니다. 그리고 문제가 되었던 안티치트도 유명한 Battleye나 EAC에 한해서 지원이 되고 있습니다.
하지만 역시 Proton도 Wine이기에 Wine처럼 삽질이 필요합니다.
특정 게임의 경우 일부 옵션을 건들거나 특정 버전을 사용해야 하는 경우가 많습니다. 대부분은 ProtonDB(https://www.protondb.com/)를 검색하면 다 나옵니다만 영어가 안 되시는 분들이나 삽질이 이해가 안 되시는 분들이 있다보니 몇몇 게임에 한해서 제가 했던 것을 공유합니다.
1. Muse Dash
특이하게도 구버전의 Proton을 써야만 제대로 돌아가는 게임입니다. Unity엔진들은 대부분 최신 버전에서 더 잘돌아가는데 이쪽은 좀 다르더군요.
스팀 라이브러리에서 Muse Dash의 오른쪽 버튼을 눌러서 속성으로 들어갑니다.
호환탭에서 강제로 특정 Steam 플레이 호환도구 사용하기를 누르고 Proton 6.3을 선택하시면 Proton 6.3이 다운로드 되면서 Muse Dash가 정상적으로 실행이 됩니다. 아마도 Wine의 특성상 일부 API의 기능이 바뀌면서 잘 되던것이 안 되는 일이 생긴 것 같습니다.
2. Mirror2 : Project-X
Mirror는 신사의 게임입니다만 Mirror2는 그래픽이 좋은 그냥 평범한 퍼즐게임입니다. 이쪽은 별도의 런처 프로그램을 사용하는데 해당 런처가 문제를 일으키는 경우입니다. 정작 게임을 따로 실행 시키면 아무 문제없이 잘 실행됩니다. 그래서 런처 대신 게임을 직접 실행하도록 수정하는 방법입니다.
똑같이 오른쪽 버튼을 눌러 속성에 들어갑니다.
이번에는 일반 탭에서 시작옵션을 적어줍니다.
eval $(echo "%command%" | sed "s|Launcher\/Mirror2.ProjectX.Launcher.exe|ProjectX\/Mirror2\/Binaries\/Win64\/Mirror2_X-Win64-Shipping.exe|")
위의 텍스트를 복사해서 싹 넣어주시면 됩니다. 그러면 게임이 난데없이 대만 중국어로 나오게 되는데 오른쪽 위의 톱니바퀴를 누르고
제일 아래의 것을 누르면 한국어가 보입니다. 위의 스크린샷을 잘 보세요.
3. Halo : Master Chief Collection
이건 그냥 안티치트 문제입니다. EAC가 분명 지원된다고 했지만 무슨 이유인지 안티치트가 정상 작동하지 않고 있습니다. 따라서 플레이 버튼을 누르고 나오는 창에서
Anti-Cheat Disabled를 선택해서 안티치트가 동작하지 않도록 해야 실행됩니다. 물론 온라인 매치는 불가능해집니다.
4. 그섬(Island : Into the Mist)
한국에서 만든 어드벤처 게임입니다. 그런데 D3D11를 Vulkan으로 바꾸는데 문제가 있는 듯 합니다. 이건 Vulkan대신 OpenGL로 실행되도록 하면 됩니다.
그리고 안드로이드와 리눅스는 분명 호환되는 부분이 많습니다. 그렇기에 Termux(https://termux.com/) 같은 앱도 존재합니다.
하지만 새삼스럽게도 리눅스에서 안드로이드 모바일 게임을 위한 앱플레이어는 마땅한게 없다는 이야기를 많이 들었습니다.
사실 당연하다면 당연한건데 리눅스에서 게임을 별로 잘 안 하거든요. 앱플레이어 같은거 만드는 곳이 주로 중국인데 중국에서 제대로 만들리가... (소위 채굴이 숨어있다던지 많은 일들이 있었습니다.)
아주 없지는 않았습니다. Genymotion이 꽤 괜찮은 그래픽 가속을 보여주는 안드로이드 가상머신이었으니까요. (https://www.genymotion.com/)지금도 상당히 괜찮고 꽤나 편리한 모습을 보여줍니다.
그런데 OpenGL의 버전은 계속 올라가는데 Genymotion의 OpenGL지원은 딱 OpenGL ES2.0까지인것 같습니다.
최신 게임에서는 텍스처가 많이 깨지더군요. (제 옵티머스 시스템 문제일수도 있습니다.)
사실 윈도우에서도 그렇지만 앱플레이어라는게 별게 아닙니다.
그냥 Android-x86(https://www.android-x86.org/)을 기반으로 x86, amd64 CPU에서 ARM혹은 AARCH64를 호환하는 libhoudini를 가상머신에 설치해서 돌아가게 만든 것에 불과합니다. 그리고 이러한 가상머신은 VMware, Virtualbox, Qemu등이 있지요.
그래서 처음에는 VMware를 써봤는데 그래픽가속이 되는데 역시 OpenGL ES 2.0이 한계였습니다. 옛날게임은 문제가 없지만 요즘 게임은 OpenGL ES 3.0을 넘어서 Vulkan으로 나오니 대응이 안 되는 겁니다.
Virtualbox는 그냥 화면이 안 뜹니다. 3D 가속을 넣으면 화면이 안 뜨는것으로 봐서 Virtualbox의 가상 그래픽카드는 지원이 안 되는 것 같습니다.
남은건... Qemu하나네요.
정확히 말하자면 Qemu/KVM입니다. KVM이라는게 커널기반 가상화라는건데 이거 하나만 써도 왠만한 리눅스 기반 가상화는 다 해먹을 수 있습니다. 그리고 레드햇의 전폭적인 지지를 지원을 받고 있기에 요즘의 가상화 서버는 이걸로 돌아간다고 보시면 됩니다.
Nvidia Optimus란 기술은 노트북과 같은 모바일 기기에서 배터리를 효율적으로 쓰기 위해 만들어진 기술입니다.
인터넷같이 가벼운 작업은 성능낮은 내장 그래픽으로 돌리고 게임같은 그래픽카드 팍팍 돌리는 프로그램에서는 자사의 Nvidia그래픽카드를 이용해 돌리는 기술입니다.
이렇게 하면 필요할때만 고성능을 요하게 되고 꽤나 이상적인 노트북 환경이 됩니다만...
현실은 그리 녹록치 않았습니다.
윈도우에서도 옵티머스 기술로 인해 버벅임이 심해졌다는 평이 잦고 MS, 인텔, Nvidia 어느누구 하나 손발이 맞지 않는 모습이 보이면서 진짜 고성능을 요하는 사람은 옵티머스가 적용되지 않은 노트북을 찾습니다.
문제는...리눅스에서도 만만치 않은 문제를 일으킨다는 겁니다. 불행인지 다행인지 근 10년이 넘는 기간이 지나면서 많이 해결되어 왔지만 리눅스에서의 옵티머스는 그냥 기본옵션이 Performance모드 즉, 윈도에서 고성능전용 모드가 기본값입니다. 얘네도 실제 옵티머스 동작이 그렇게 썩 좋지 않다는 것을 알고 있는 겁니다.
그리고 이 옵티머스 동작이 바로 리누즈 토발즈 형님이 Nvidia에게 뻑유!!를 날리게 된 결정적인 이유였습니다.
정확히 말하면 누군가가 리눅스에서 옵티머스가 고통스럽다고 질문했고 이에 대한 토발즈의 답변이 바로 이거였습니다.
그런데 또 생각해보면 Nvidia만한 안정적인 드라이버를 만드는 곳도 드물다는걸 생각해보면...
어쨌건 이런 상황을 보던 캐노니컬도 눈뜨고 보고 있지만은 않았고 Prime이라는 기술을 만들어냅니다. (둘이 합치면 옵티머스 프라임 - 트랜스포머에 나오는 그 로봇이지요.) 일반 커뮤니티에서는 VirtualGL기술을 사용한 Bumblebee (네, 마찬가지로 트랜스포머에 나오는 범블비 맞습니다.)라는 것으로 대체 했습니다.
지금은 Bumblebee는 사실상 도태된 상황이고 Nvidia드라이버를 설치하면 PRIME을 기본적으로 사용하는데 기본 모드가 Performance 모드입니다. 사실상 옵티머스 동작이 아닙니다. 그냥 모든 순간 Nvidia카드 가속입니다.
nvidia-config을 실행해서 PRIME Profile을 보면 3가지 모드가 있는데 Intel은 비싼 노트북 사서 돌릴 사람은 아무도 없을 것 같고 Nvidia On-Demand와 Nvidia(Performance Mode) 둘중 하나가 가장 이상적인 환경인 것이지요.
그중 가장 이상적인 환경은 Nvidia On-Demand입니다만... Vulkan이나 OpenGL환경이 들어가면 자연스럽게 Nvidia카드로 가속을 하는 모드입니다.
Blender쯤 되면 알아서 넘어가야하는거 아닌가 싶은데 nvidia-config에도 무언가 프로파일 설정을 해서 넘기는게 있겠거니 했는데..
뭔가 되게 복잡합니다.procname을 적고 그에 따라 프로파일을 맞춰서 돌아가게 한다는건 좋은 생각인데 그래픽카드 쓰는 프로그램이 어디 한둘이어야죠. 그냥 메뉴에 붙은 바로가기를 수정해서 스크립트로 처리하면 안 될까 싶더군요. 예전에 Bumblebee때는 opti-run이라는 것으로 처리했었는데 이런 것처럼 말이죠.
export 명령을 사용해서 PRIME설정을 그때만 바꾸는 방식입니다. 전역 설정이 아니라 그 세션에서만 돌아가니까 바로가기 명령에 저걸 새겨넣기만 해도 충분합니다.
다만 명령줄이 조금 깁니다.
그래서...
스크립트를 하나 만들었습니다. nvidia-run 이라는 스크립트인데 위 첨부파일을 다운로드 받아 압축을 풀어서 나온 스크립트를 /bin 혹은 /usr/bin에 넣어두고 NVidia On-Demand 상태에서 고성능이 필요할때마다 opti-run때처럼
nvidia-run 사용할 프로그램
이런식으로 사용하면 됩니다.
예를 들면..
스팀을 Nvidia 카드 없이 그냥 실행하면
이렇게 nvidia-smi에 아무것도 안 뜨지만
nvidia-run steam 이라고 실행하면
이렇게 뜹니다. 즉, Nvidia카드를 쓰는 것이지요.
이렇게 고성능이 필요한 프로그램이 있다면 메뉴편집기를 사용해서
이렇게 명령부분 앞에 nvidia-run 을 적는 것으로 고성능모드를 쓰게 됩니다. PlayonLinux나 Steam 같이 게임같이 고성능을 요구할 경우에는 nvidia-run을 붙여주면 끝이 납니다. (딱 opti-run 사용방법 그대로라고 생각하면 됩니다.)
어차피 명령줄로 실행하는 경우는 GUI에선 드무니까 이런식으로 쓸 수 있다면 엄청 편리하겠지요! 귀찮기는 하지만 이게 진짜 Optimus 기능이 아닐까 싶습니다.
P.S 사실 이렇게 쓰게된 계기가 가상머신에서 GPU가속쪽에 문제가 생겨서 보니 옵티머스 문제였고 가상머신에서 옵티머스를 끄니까 아주 잘 돌아가더군요. 그렇다고 아주 끄니 3D가 너무 느리고요. 중간인 On-Demand를 켜고 이런식으로 쓰니까 시스템이 상당히 안정적이게 되어서 그냥 이렇게 쓰기로 했습니다.