Linux용 Steam에서 Steam Play(Proton)을 사용해서 이런저런 많은 게임을 구동했습니다. 하지만 Wine도 완벽하지 않고 그것을 기반으로 한 Proton도 완벽하지 않기 때문에 모든 게임이 구동되는 것이 아닙니다. 그래서 Protontricks 같은 각종 트릭을 써서 구동을 하고 있습니다. (https://moordev.tistory.com/284)


하지만 게임 구동이 안 되는 것이 Wine문제일 수도 있고 DXVK 문제일 수도 있습니다. 사실 DXVK이전에 WineD3D로 기존 Direct3D게임을 OpenGL로 구동하는 방법이 있었습니다. 이쪽은 느리긴 하지만 구동 자체는 완벽합니다.


보통 DXVK문제로 Steam Play에서 오류가 나는 경우는 다음과 같습니다.


The Island : In To The Mist란 게임으로 GameMaker2 엔진을 사용했고 DirectX11을 요구합니다. 그런데 저 오류 코드는 VRAM관련 오류인데 제 시스템에서 오류가 날 이유가 없습니다. 이 게임은 VRAM을 512MB만을 요구하거든요. 그러니까 하드웨어 문제가 아니라는 의미입니다. 결론은 Proton의 문제란 것이고 이걸 해결 하는 방법은 간단합니다. DXVK를 써서 Vulkan 모드로 구동하지 않고 WineD3D로 OpenGL모드로 구동하게 하면 됩니다.


Vulkan 드라이버 설치 및 SteamPlay를 활성화 했다는 가정하에 이야기 하겠습니다.

SteamPlay 활성화는 https://moordev.tistory.com/282 이 곳을 참고하세요.


게임 이름의 속성으로 들어갑니다.


"시작 옵션 설정..." 버튼을 누릅니다. 


여기에

PROTON_USE_WINED3D11=1 %command%


라고 적어주시면 됩니다. 뒤에 %command%까지 적어주셔야 합니다.

그리고 플레이 버튼을 누르면...


리눅스에서 문제 없이 구동이 됩니다!

만약 Vulkan이 구동이 안 되는 구형 시스템이라면 이 옵션으로 게임이 돌아가는 경우가 많다고 하니까 참고하세요!


Unity3D 엔진을 활용한 게임에서 나는 이런 오류도 같은 방법으로 해결이 가능합니다.

,

일단 먼저 https://moordev.tistory.com/282 이 글을 먼저 보는 것을 추천합니다.


이전에 우린 리눅스용 스팀에서 Proton으로 윈도우용 게임을 실행하는 것을 알아봤습니다. 이전에 PlayonLinux나 직접 Wine으로 삽질하는 것보다 훨씬 더 쉽게 게임을 실행하고 관리 할 수 있게 되었다는 것은 엄청난 발전입니다.


다만 아직도 상당수 게임들은 https://appdb.winehq.org/ 여기서 찾아보듯이 winetricks등을 이용해서 추가 라이브러리를 지정해야 하는 등 여전히 삽질이 필요합니다. 물론 여기까지 왔다는 것 자체가 상당히 고무적인 일입니다.


그래서 이번에는 추가 삽질을 해야하는 게임에 대해 알아보고자 합니다.


이번 타겟은 Puyo puyo Tetris입니다.

이전에도 PlayonLinux로 설치 및 실행까지 성공했던 게임입니다.


이젠 리눅스용 스팀에서 이 게임을 큰 문제없이 실행 가능하다.

사실 이건 Proton으로 큰 문제없이 실행되는 게임입니다. 문제는 실행만 되지 온라인모드만 들어가면 그대로 얼어붙는 문제가 생깁니다. 원인은 X_audio_2_7.dll이 완벽하지 않아서 생긴 일이라고 합니다. 


그걸 알아볼 수 있는 방법은 winehq.org에서 직접 찾아보는 것입니다.

https://appdb.winehq.org/objectManager.php?sClass=version&iId=36583


찾아보니 winetricks로 xact를 설치하고 winecfg에서 xaudio2_7을 네이티브로 설정하라고 나오는군요.


그럼 우린 이걸 응용해서 proton에 적용하면 됩니다.


우린 winetricks대신 protontricks(https://github.com/Sirmentio/protontricks)를 쓰면 됩니다.


설치는

sudo apt install winetricks

wget https://raw.githubusercontent.com/Sirmentio/protontricks/master/protontricks && chmod +x protontricks
sudo mv protontricks /usr/bin/protontricks


이렇게 하고 리눅스용 Steam에서 Puyo Puyo Tetris를 설치합니다.

이건 어렵지도 않지요. 설치가 완료되면 플레이버튼이 활성화 될 겁니다. 일단 플레이 버튼을 눌러서 사전설치 라이브러리를 설치합니다.


이제 Visual C++ Runtime 등이 설치 될 겁니다. 그리고 게임이 실행되겠지만 아쉽게도 음악이 들리지 않고 게임중에 멈추는 일이 일어납니다.


이제 이걸 Protontricks로 처리하면 됩니다. winehq.org에 나온 대로 우린 xact를 설치하고 xaudio2_7을 네이티브 설정만 하면 됩니다.


일단 터미널을 열고 시작해봅시다.

protontricks -s puyo


이렇게 하면

자 괄호안의 숫자코드가 보일겁니다. 저게 APPID입니다. 저걸 복사해서 다음 명령을 칩시다.


protontricks 숫자코드


여기선 숫자코드가 546050이군요.


이제 다음과 같은 창이 뜰겁니다.

터미널 내용도 확인해주세요.


이제 winetricks창에서 Select the default wineprefix를 선택하고 확인을 누릅니다.


다음에선 Install a Windows DLL or component를 선택하고 확인

그리고 아래로 쭉 내려서 xact에 체크하고 확인을 누릅니다.

그러면 이제 터미널에서 무언가 막 지나가면서 설치가 될 겁니다.

그리고 다 되었으면 취소를 눌러서 전 화면으로 돌아옵니다.


이번에는 Run winecfg를 선택

여기는 Wine을 많이 써보셨으면 익숙하실텐데 라이브러리 탭으로 들어갑니다. 그리고 새로 덮어 쓸 라이브러리에 xaudio2_7을 적은 다음 더하기 버튼을 누릅니다. 그러면 네이티브 설정 완료입니다.


덮어쓰기 목록에 xaudio2_7이 들어가게 된다.

그리고 확인을 누른 다음 winetricks창을 닫아주시면 됩니다.


이제 다시 Steam에서 Puyo Puyo Tetris의 플레이버튼을 누르면...


아무 문제 없이 실행이 됩니다!!!!!


Proton은 Vulkan이 지원된다는 가정하에 구동이 됩니다. 만약 Vulkan 실행이 되지 않는다면 mesa-vulkan-drivers 패키지를 설치해보시기 바랍니다.


sudo apt install mesa-vulkan-drivers


일부 AMD GPU의 경우 커널파라미터를 설정해야 할 수도 있습니다.


관리가 권한으로 /etc/default/grub 파일을 열고

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"


이 부분을

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash radeon.cik_support=0 amdgpu.cik_support=1 radeon.si_support=0 amdgpu.si_support=1"


이렇게 고쳐준 다음

sudo update-grub


이렇게 명령을 내려주면 radeon 드라이버대신 amdgpu드라이버가 돌아가면서 vulkan 지원이 됩니다.


Protontricks와 리눅스용 스팀을 이용해서 윈도우용 게임을 굴리는 법을 알아봤습니다.

,

이전에 리눅스용 동영상 가속 시스템에 대해 이야기 한 적이 있습니다.

https://moordev.tistory.com/181


VAAPI, VDAPU 등이 존재한다고 했지요. 이중에서 VDPAU는 Nvidia의 것이고 인코딩에 대해서는 호환Wrapper를 써도 쓸 수가 없습니다.

VAAPI는 인텔과 AMD 둘 다 쓸 수 있고 VAAPI는 인코딩과 디코딩 둘 다 지원이 가능합니다.


그래서 vaapi지원 여부를 보기 위해서 vainfo를 봤습니다.

에러가 나네요...


이 경우에는 mesa기반의 vaapi 드라이버가 설치되지 않은 것입니다.

sudo apt install mesa-va-drivers


마찬가지로 vdpau도 확인해 봤습니다.



vdpau도 지원이 안 되는군요...

sudo apt install mesa-vdpau-drivers


이제 지원이 되는군요. VAAPI나 VDPAU로 이제 구동이 됩니다.

VLC나 크롬의 HTML5플레이어를 사용하면 이전보다 훨씬 더 쌩쌩한 것을 볼 수 있습니다.

,

리눅스용 Steam에 Proton이 적용되어서 윈도우 게임을 지원한지 시간이 꽤 지났습니다.


물론 아직도 Proton의 존재를 모르는 사람도 있고 아직 Proton의 성능이 미덥지 못하다고 생각하시는 분도 많습니다. 그도 그럴 것이 Wine부터 모든 API를 완벽하게 지원이 되지 않거든요.


하지만 Vulkan이 지원된다는 가정하에 DirectX9이하 게임이야 Wine으로도 아무 문제 없이 구동되고 DirectX10~DirectX11은 DXVK프로젝트로 쌩쌩하게 구동이 됩니다. 문제는 몇 가지 부가 라이브러리(xact, xinput 호환 문제 등) 정도입니다.


그런데 제가 Proton이야기는 많이 했는데 정작 Proton을 활성화 하는 방법은 한번도 알려드린적이 없더근요.


사실 Proton을 활성화 하는 것은 아주 간단합니다. 이전에는 베타버전에서만 되었지만 이젠 Steam 정식 버전에서도 Proton이 지원됩니다.

리눅스용 스팀에서 왼쪽위의 Steam-설정으로 들어갑니다.


업데이트 된지 얼마 되지 않아서 번역이 되지 않은 것 같다.

그리고 Steam Play에서 Enable Steam Play for all title체크를 하고(이러면 윈도용 게임도 Linux에서 지원 되는 것으로 나옵니다.) 그리고 아래의 Use this tool instead of game-sepcfic selections from Steam에도 체크를 합니다.


그리고 Proton 버전을 선택하면 됩니다. 2018년 10월 현재 안정판은 Proton3.7-8입니다.


그러면 윈도용 게임도 리눅스용 게임에 뜨면서 플레이 버튼이 활성화가 됩니다. 아직 모든 것이 지원되는 것은 아니고 Vulkan이 활성화 되어야 하지만 일단 리눅스용 스팀에서도 게임이 다운로드가 되는 것이지요.

Steam Play로 돌아간다는 메시지가 떠있다.

하지만 Wine 시스템과 달리 Steam의 Proton은 철저하게 Wine의 라이브러리만을 이용합니다. 기존 Wine 시스템에서는 필요에 따라 winetricks나 PlayonLinux의 기능을 이용해서 MS의 라이브러리를 오버라이드해서 쓰곤 했습니다. 하지만 Proton은 그것이 직접적으로 지원되지 않지요.


하지만 Proton도 결국에는 Wine...

winetricks를 Proton에 쓸 수 있게 해주는 툴이 나왔습니다. 일명 protontricks

https://github.com/Sirmentio/protontricks


python3, winetricks를 설치하고 protontricks에서 proton쪽에 winetricks를 써서 설치할 수 있게 해줬습니다.

python3는 보통 기본적으로 설치되어 있으니 넘어가고


sudo apt install winetricks

wget https://raw.githubusercontent.com/Sirmentio/protontricks/master/protontricks && chmod +x protontricks
sudo mv protontricks /usr/bin/protontricks


이렇게 하면 protontricks를 사용할 수 있습니다.


만약 자신이 설치한 게임이 네이티브 라이브러리를 요구한다면

protontricks -s 게임이름

이걸 치면 숫자가 나옵니다.


저기 뒤에있는 숫자가 바로 APPID입니다. 그리고 필요한 라이브러리를 winetricks쓰듯이


protontricks APPID 라이브러리이름


이렇게 하면 winetricks로 라이브러리가 설치됩니다. 즉, winetricks의 커맨드를 대신 할 수 있는 것입니다. 편리하지요.


물론 아직도 winetricks로 난감한건 많습니다. 하지만 이렇게 함으로서 리눅스 게이밍이 점점 더 좋아지고 있다는건 환영할만한 일입니다. 특히 DXVK가 정말 설치하기 힘들었거든요.


이제 PlayonLinux기반보다 더 편리해졌으니 더 게임플레이가 좋아질 것입니다.

,

LibreOffice가 6.x로 업그레이드 된지 많은 시간이 흘렀습니다.


기존 LibreOffice 5.4에서 상당히 많이 변했고 MS오피스의 호환성도 개선되었습니다.

하지만 이런저런 기능이 추가되면서 이젠 너무 무거운 물건이 되어버렸습니다. 저도 어떻게든 꾹참고 쓰려고 했지만 인내심의 한계가 극에 달해버려서 도저히 못버티겠더군요.


2018년 10월 현재 LibreOffice는 6.1.x가 최신 버전이다. 그러나 너무 무거워졌다.

자바도 걷어내고 OpenGL가속도 이용하고 이런저런 방법을 동원했지만 현재 제가 사용하는 사무용 노트북에서 LibreOffice는 너무 무거운 녀석이었습니다.


너무 심각해서 구글의 오피스 슈트를 쓸 생각까지 했습니다. 실제로 크롬을 이용해서 구글 오피스 슈트를 굴리면 아주 쌩쌩하게 잘 동작했습니다.


그런데 구글의 앱은 무조건 온라인 상태여야 한다는 문제가 있고 제가 사용하는 PC의 폰트를 사용하기 어렵다는 단점이 있습니다.


그러다보니 초기 구동속도는 느렸지만 일단 작업에 들어가면 꽤 괜찮은 반응속도를 보였던 LibreOffice 5가 생각이 나더군요. 그래서 이번에는 LibreOffice6를 삭제하고 LibreOffice의 버전을 낮춰보도록 하겠습니다.


현재 LibreOffice 5.x의 최신은 5.4.7.2입니다. 아마 5.4 이후로 업그레이드는 없다고 했기 때문에 이후로도 계속 이 버전이 이용될 것입니다.


5.4.1.2의 deb 패키지는


64비트(amd64)

https://downloadarchive.documentfoundation.org/libreoffice/old/5.4.7.2/deb/x86_64/



32비트는(x86)

https://downloadarchive.documentfoundation.org/libreoffice/old/5.4.7.2/deb/x86/



이곳에서 받을 수 있고


다운로드 받아야 하는 패키지는

제일 위에 있는

LibreOffice_5.4.7.2_Linux_XXX_deb.tar.gz


이것과 중간에 있는


LibreOffice_5.4.7.2_Linux_XXX_deb_langpack_ko.tar.gz


이 두 파일을 찾아서 다운로드 받으시면 됩니다. 중간에 XXX는 시스템 환경(x86, x86_64입니다.)


그리고 기존의 LibreOffice를 삭제합니다.


우선 시냅틱 패키지 관리자를 이용해서(만약 없다면 설치합니다. sudo apt install synaptic) 


libreoffice로 시작되는 모든 패키지를 삭제합니다.

만약 LibreOffice PPA까지 등록 되었다면 해제합니다.


그리고 위에서 다운로드 받은 LibreOffice 5.4패키지를 설치합니다.


일괄 설치이기 때문에 그냥 터미널이 더 편합니다.


압축 푼 곳에서

sudo dpkg -i *.deb


그냥 이게 더 편하다..



그런데 무슨 이유인지 LibreOffice 아이콘이 등록이 되지 않았군요! 물론 로그아웃하고 돌아오면 등록 되어있습니다. 아마도 MATE 버그인 것 같습니다.


일단 터미널에서 libreoffice5.4 명령으로 멀쩡히 LibreOffice가 실행되는지 확인합시다.


으음.. 되는군요!


그리고 도구-옵션 에서

자동업데이트를 그만 두게 합시다.


이제 계속 업데이트한다고 난리 칠 일은 없을겁니다.


이상 리브레오피스 구버전으로 롤백 끝!

,

현재 전 세계에서 사용되는 OS는 크게 두가지로 나뉩니다. Unix와 그 호환 계열(BSD, Android, macOS, Linux), 그리고 Windows계열 이렇게 입니다.


일반인들은 컴퓨터OS하면 Windows만 떠올리기 때문에 당연히 Windows가 표준일 것이라고 생각하지만 현실을 보면 Unix계열의 점유율이 엄청납니다. 현재 인터넷의 근간을 이루는 서버들은 대부분 Linux를 기반으로 하고 있고 상당부분은 BSD나 Sparc 계열의 Unix입니다. Windows서버의 점유율은 그렇게 높지 않지요.


그리고 클라이언트쪽도 사정이 만만치 않아서 Android나 iOS를 기반으로 한 모바일 계열이 거의 점령한 라서 Unix계열은 거의 전세계IT시장에 상당부분을 가지고 있다고 봐야합니다.

그렇다고 Unix만 신경 쓸 수는 없는 것이 Windows가 PC 데스크탑에서 대부분이고 최종 사용자들이 이것을 쓰니 이쪽도 신경을 써야합니다. 심지어 게임기조차도 Xbox는 Windows기반이지만 PS4는 BSD를 기반으로 합니다.


이러다보니 Windows를 쓰는 사람도 Unix계열을 신경써야하고 Unix계열을 쓰는 사람도 Windows를 신경써야합니다.


하지만 이 둘은 시작이 달랐던 관계로 난감한 일이 자주 벌어지곤 합니다.


가끔 txt파일을 Windows의 메모장으로 열면 중간중간�로 도배되는 경우가 있었습니다. 원인은 텍스트파일에서 문장의 끝을 의미하는 코드가 Windows와 Unix가 달라서 벌어진 일입니다.


그 이유는 줄 바꿈코드가 당시에는 딱히 표준이 정해지지 않아서 CR, LF 라는 두가지가 혼용된 상태였고 리눅스나 Unix계열은 LF(\n)를 매킨토시(macOS9이하를 말함)는 CR(\r)을 Windows는 이 둘을 합친 CRLF(\r\n)을 사용했기 때문입니다.


이 와중에 메모장은 엄청 간단하게 만들어진 프로그램이었기 때문에 기존 DOS시절부터 내려오던 파일방식만을 지원했고 CRLF코드가 아니면 줄바꿈코드가 아닌 다른 코드로 인식했기 때문에 알 수 없다는 의미의 �로 처리되거나 줄바꿈이 무시되어 버린 것입니다.


이 문제는 Windows10 RS4 (1803)에서 해결이 되었고 지금은 Unix방식의 텍스트도 메모장에서 잘 읽어들이고 있습니다.


참고는 https://blogs.msdn.microsoft.com/commandline/2018/05/08/extended-eol-in-notepad/

이게 뉴스로 다뤄질 정도로 정말 오래된 문제라는 것을 아실 필요가 있습니다.


그래서 텍스트 프로그램을 짤 때 Unix방식인지 Windows방식인지 확인 하는 절차를 밟거나 LF든 CR이든 나오면 그냥 줄바꿈을 한다던가 하는 각종 코드들이 만들어지게 되었고 저장할 때 CRLF를 LF로 갈아버린다거나 하는 기능들이 추가되었습니다.


이 문제는 여전해서 Python같은 인터프린터 언어에서는 CRLF와 LF를 둘 다 읽어들여서 처리하는 코드가 들어있고 각종 개발 도구에서는 LF만을 허용하는 등 해당 문제에 대해 대처하고 있습니다. (사실 대다수 개발 도구는 Unix계열쪽을 선호합니다. \n만 쓰기 때문에 편하거든요.)




이외에도 파일 접근시 쓰는 \과 /의 문제도 있습니다.


Windows계열은 C:\Program files\blah blah라고 처리하지만

Unix계열은 /home/moordev/blah blah 라고 처라합니다.


 폴더 구분 기호가 다른 것입니다. 그런데 파일 처리하는 프로그램에서는 절대경로로 처리하려면 \혹은 /을 적어줘야하는 문제가 발생합니다. 그런데 그렇게 만들면 어느 한쪽OS에서만 동작을 하는 문제가 생기게 됩니다. 그래서 귀찮게도 OS구분을 하는 코드가 또 들어가야 합니다. \를 쓸 것이냐 /를 쓸 것이냐룰 두고 함수를 따로 만들어 넣는 것입니다. (그래서 개발자들은 같은 경로에 파일이 있는 것을 선호하는 것일지도 모릅니다.)


오픈소스 프로그램은 그래도 신경을 써서 만들기 때문에 해당 함수를 넣어서라도 OS처리를 하려고 하는 경향이 있습니다. 개발자 입장에서는 다중OS를 위해 귀찮지만 넣는 셈입니다.


아마도 이 문제는 너무 오랫동안 내려온 문제라서 해결이 되는 않을 것 같습니다. 역으로 너무 오랫동안 내려왔기에 사람들이 미처 신경을 못 쓸 지경이 되었습니다. 이 문제가 해결되려면 OS가 어느 한쪽으로 통일 되었을 때일텐데 그 날은 너무 멀게 느껴지는군요.

,