TextHooker란 프로그램들을 아시나요? 사실 대부분의 일본산 비주얼노벨 게임을 하신 분들이라면 비슷한 프로그램들을 상당히 많이 알고 계실겁니다.

제일 유명한 것이라면 TextHooker중에서 제일 대중에게(?) 퍼진 Oh! TextHooker가 있습니다. 이외에도 4chan에서 만든것으로 추정?되는 AGTH(Anime Game Text Hooker)와 중국에서 만든것으로 보이는 VNR(Visual Novel Reader) 등이 있습니다. 상당히 많은 프로그램들이 있는데 이들의 공통점은 공통적으로 쓰이는 API(대표적인 것이 TextOut())를 후킹해서 문자열을 끌어낸다음 번역기나 사용자사전을 써서 번역된 문장을 출력하는 것이 목적입니다.



각종 TextHooker의 할아버지뻘인 Oh! TextHooker 지금도 돌아가는 게임이 있다! (출처:http://ohhara.sarang.net/ohthk/scrshots.html)

 


가장 최신의 기술로 무장했고 편의성도 훌륭한 VNR의 모습. 출처 : https://namu.wiki/w/VNR


API후킹 기술은 사실 어둠의 영역에서도 자주 사용되었고 빛의 영역에서도 상당수 이용됩니다. 대표적인 어둠의 영역은 키보드의 이벤트를 후킹해서 키입력 로그를 만들어 해킹하는 곳에 사용되는 것을 말 할 수 있습니다. 하지만 대개 이런 부류는 백신에서 쉽게 잡아냅니다. 빛의 영역은 시각장애인용 TTS프로그램을 들 수 있습니다. 마우스를 움직이면 마우스 아래에 있는 문장을 읽어들여서 TTS로 읽는 것이지요. 이런 프로그램은 상당히 종류가 많습니다. 그런데 리눅스에서는 이런류의 프로그램이 사실상 없습니다. Firefox나 Chrome의 확장에서는 있는 것 같지만 인터넷 웹환경에 한해서만 작동하기 때문에 한계가 있습니다.


애초에 이런 게임들이 당연히 (일본어판) Windows전용이다보니 참 문제가 많습니다. 리눅스에서 굴린다는 것 부터가 이미 글러먹은 것이지요. 그것도 번역기를 통하려고보니 더 엉망진창이고요. Wine은 DLL injection이나 API Table같은 기술이 잘 먹히지 않습니다. 본래의 API와 외부 구조는 비슷하지만 내부 구성이 다르기 때문입니다. (내부 구성까지 같으면 Wine은 Windows의 저작권에 위배되는 프로그램이 됩니다.) 즉 VNR이나 Oh! Text Hooker는 정상적인 동작이 보증되지 않습니다.

애매한 것으로 Mort란 것이 있기는한데 이건 OCR을 쓴 것이니 넘어가도록 합시다.(이전에 제가 Mort의 기술을 써서 리눅스에서 비슷하게 굴린적이 있습니다.)


그런데 API 후킹의 원리는 API의 외부 구성을 그대로 만들고 본래의 API대신 자신이 끼어들어 이리저리 조작한 후 본래의 API를 호출하는 원리입니다. (본래의 API를 호출하지 않으면 프로그램이 정상적으로 돌지는 않을 겁니다. 문자열이 나와야 하는데 안 나온다거나...)그런데 이거 Wine이 하는 짓하고 비슷합니다. http://moordev.tistory.com/83 그래서 저는 여기서 이런 방법은 어떤지 제안을 한 적이 있습니다. 해 본 결과 폭망이었지만 (애초에 구조가 달라서 먹히지 않습니다.) 역으로 리눅스에서 Wine으로 게임을 굴리면서 후킹하는 것은 어렵지 않게 구현할 수 있었습니다. gdi.so소스를 뜯어고치면 TextOut()함수를 내 마음대로 돌아가게 하는 것은 어렵지도 않고 CreateFont()함수도 고쳐버리면 폰트도 내 마음대로 바꿀 수 있게 되는 겁니다.(이건 AppLocale의 원리와 같습니다.)


그래서 sprintf함수로 문장을 처리하는 게임을 타겟으로 삼아 Wine에서 구현한 sprintf함수 조작한 다음 sprintf 출력 문장을 디버그창에 띄우게 했더니...의외로 잘 나오네요.


......이거 잘하면 리눅스용 후커도 만들 수 있을 것 같습니다. 번역 엔진이 문제이기는 한데 그건 그냥 구글번역을 통하면 될 듯하고 Chrome하고 연동하는 방법을 쓰면 구글번역기능도 쉽게 쓸 수 있을 듯 합니다. 하지만 이건 윈도용 게임이야기이고 리눅스용 게임은.....나중에 생각하도록 합시다. 아직 리눅스용 게임은 이러한 물건은 적으니까요.



,

Linux가 발전한 것은 Opensource라는 것이 매우 중요한 점이었습니다.

BSD계열도 Opensource로 발전했습니다.

Firefox도 Netscape의 소스 공개를 기반으로 약 5년~10년동안 리브랜딩을 했습니다.

Blender는 오픈소스를 무기로 3대 3차원그래픽 모델러의 하나가 되었습니다.(3대 모델러중 유일한 무료 프로그램입니다.)

OSX의 mach커널은 본래 오픈소스였고 지금도 오픈소스입니다.

Wine은 기어코 Windows의 API를 다른 OS에 호환하는데 성공했습니다.

OpenTTD는 본래 Transport Tycoon이란 게임의 리버스 엔지니어링이지만 지금은 다른 게임이라고 해도 될 수준입니다.

Arduino는 소스만 공개한 것이 아니라 하드웨어의 설계도를 공개함으로서 수없이 많은 변종들을 만들어내었습니다.


오픈소스는 이처럼 많은 것들을 이룩했습니다. 심지어 걔중에는 본래 유료 상용프로그램이었지만 오픈소스로 전환해서 성공한 계열도 있습니다. 소스코드의 공개는 정말 무시무시한 파급력을 지녔다고 할 수 있습니다.


위에서 보시면 Wine의 이야기가 있는데 Wine은 정말 무시무시한 결과라고 할 수 있습니다. Microsoft가 공개한 API의 형태(Microsoft 기술 문서 보면 다 나와있습니다. API를 알아야 이걸 쓸지 말지 알 터이니...)와 이를 호환하는 API를 만들어서 X와 콘솔 화면에 뿌린다는 생각으로 출발했습니다. 그리고 지금은 성공한 프로젝트이며 지속적으로 진행되어야 하는 프로젝트가 되었습니다. 지금은 MSOffice 3총사(Word, Powerpoint, Excel)를 별 삽질없이도 굴릴 수 있을 정도로 상당히 안정화 되었고 저도 덕분에 잘 쓰고 있습니다.


Wine으로 실행한 Excel 너무 잘 굴러간다.


다만....Wine은 유닉스 환경에 호환되게 돌아가게 하기 위해 몇가지 변칙이 적용되었습니다. 대표적인 것이 X환경이 기본적으로 돌아가며 GCC기반이어야 한다는 것이 전제입니다. GCC야 본래 C표준을 따르는 것이니 문제가 전혀 없지만(심지어 Clang을 써도 됩니다. C표준이라..) X환경이 전제되기 때문에 Wine은 X가 돌아가야 제대로 돌아간다는 의미가 됩니다. 그리고 단순히 응용프로그램이 굴러가는 것에 의미를 두기 때문에 Windows커널에 직접붙는 장치들은 호환이 되지 않습니다. 대표적인 것이 보안동글입니다. 해당 동글은 값비싼 프로그램에서 주로 사용하는데, 드라이버가 당연히 Windows만 있습니다.(Windows용 프로그램이니 당연히 Windows 드라이버만 있습니다.) 이런 프로그램은 Wine에서 굴릴 때 당연히 문제가 생깁니다. 


그러면 이렇게 생각해 볼 수 있습니다. Wine에 드라이버까지 붙이려면 Windows 커널까지 구현해야하나? 그럼 처음부터 Windows의 호환커널부터 만들면 어떨까?

 네 이런 생각과 가장 흡사한 프로젝트가 ReactOS입니다.

https://reactos.org/

2016년 3월에 0.4버전이 드디어 릴리즈 되었습니다. 0.3버전이 2001 2006년 즈음에 나왔던 것으로 기억되는데 참 오래되었습니다. 사실 이 프로젝트는 98년 시작(!)되었습니다. 네 98년이요. Windows95~98이 나왔던 바로 그 시절입니다. Windows98가 어떤 OS였는지 아신다면 ReactOS가 무엇을 노리고 나왔던 것인지 알 것입니다. Windows95가 일대의 파란을 일으키고 있을 때 호환 OS를 목표로 했던 것입니다. 즉, Wine보다 역사가 더 오래되었습니다. 단순 API호환이 아닌 커널부터 만드는 것을 감안하면 이해가 됩니다.


현재는 NT커널을 호환하는 것을 목표로 하고 있고 0.3버전은 WindowsXP시절에 나왔으니 XP의 드라이버 호환을 목표로 했습니다. 지금은 아마도 Windows커널 6~혹은 Windows커널 10의 호환을 목표로 하고 있을 겁니다.


참고로 0.4버전도 아직은 Alpha 단계입니다. Wine도 beta딱지를 10년동안 달고 있었으니 아직까지도 알파를 달고 있을만합니다. 덕분에 아직도 100% 장치 호환은 꿈도 못 꾸고 있습니다. 하지만 Wine과 같은 일반 응용프로그램 호환은 그럭저럭 가능한 수준까지 올라왔습니다. 그도 그럴것이 API단계에서는 Wine의 코드를 수혈받았다고 하네요. 그래서 DirectX를 직접적으로 구현을 못하고 있고 Wine의 D3DtoOGL기능을 써서 OpenGL로 구현하고 있습니다. 그나마도 드라이버문제로 잘 안 됩니다. 추후 ReactX프로젝트로 DirectX호환 프로젝트도 계획되어있고 0.5버전은 Beta단계로 나아갈 예정이라고 하니 기대되는 대목이라고 할 수 있습니다.


다만 써본 결과...Alpha단계라 아직은 실사용으로는 무리입니다. 하지만 응원할 수 밖에 없는 프로젝트인 것은 확실합니다. 무료버전의 Windows가 나오는 것이라고 봐도 상관 없고 OpenTTD가 새로운 녀석이 된 것처럼 ReactOS도 Windows와 호환성을 갖춘 새로운 물건이 될 테니까요. FreeDos가 MS-Dos와 호환을 갖추었고 Linux가 Unix와 호환을 갖추었듯이 ReactOS도 이런식으로 호환을 갖추어서 발전 할 겁니다.그리고...새로운 OS가 될 수 있을 겁니다. 그러면? IT의 발전이 또 한번 이루어 지는 겁니다. 우리가 지금까지 봐온 것처럼 말이지요.

,

 MATLAB은 공대에서 제어공학이나 전자공학을 한다면 한번쯤은 써보는 물건입니다. (요새는 영상처리나 음성학에서도 사용하고 경제학에서도 사용합니다. 그냥 수학하고 관련있으면 다 씁니다.)공학에서 사용하는 수학을 미리 함수화해 놓았고 코드도 그리 어렵지 않으며 배우기도 굉장히 쉬워서 여기저기에서 사용하고 있습니다.


 무엇보다 MATLAB은 학생들에 한해 평가판을 쉽게 제공해줍니다. 사실 학생인지 확인도 안하고 그냥 평가판을 제공한다는 느낌이지만 학생들이 졸업하고나서 연구소에서 MATLAB을 쓸 것이라고 예상한다면 이는 좋은 마케팅수단이 될 것이라는 것은 예상이 가능합니다.


 최신의MATLAB은 한글 지원이 상당히 잘 됩니다. 별 다른 설정없이도 한글입력이 되고 한글을 읽는데에 문제가 전혀 없습니다. 2010버전만 하더라도 폰트문제와 인코딩 문제로 황당한 경우를 많이 겪었는데 거의 해결되었더군요. 문제는 이거 윈도우에서는 그동안 이런 문제가 전혀 없었다는겁니다. 사실 대다수 MATLAB사용자들은 윈도우를 사용하니 한글문제에 관해 몰랐을 겁니다. 이런게 있었어? 하는 수준이었겠지요. 하지만 리눅스나 OSX에서는 한글문제로 골치아픈 적이 많았습니다. 게다가 X의 가속문제로 3차원 그래프를 그리는데 애로사항이 꽃피었습니다. 지금도 이 문제는 현재 진행형이라 AMD그래픽사용자들을 소프트웨어 렌더링방식으로 그래프를 표현합니다.


 MATLAB과 언제나 함께하는 Simulink는 MATLAB이 걸어온 길을 아직도 못 왔습니다. 한글문제가 아직도 있더군요. 모델파일 저장하는데 한글이 경로에 끼여 있으면 저장이 안 됩니다. UTF-8인코딩으로 저장하면 보통은 정상적으로 동작해야 정상인데 이 놈의 물건은 그게 안 됩니다. 나보고 어쩌라는 건지... 윈도우에서는 잘 되는 듯 합니다. 혹시모르니 한글을 빼라고는 하지만 유니코드 지원이 이렇게 부실해서야 이거야 원.(원래 유니코드가 나오기 전부터 만들어진 물건이기는 합니다. 그래도 1년에 두 번이나 버전업을 하면서 이렇게 까지 부실한것은 좀...)


리눅스 지원을 해준다는 점은 감지덕지 하지만 계속 이런식이면 Scilab이나 Numpy를 밀어붙여서 가는 수도 있습니다. 사실 이미 Scilab은 고려했다가 ToolBox 일부가 부실해서 MATLAB으로 회귀한건데 호환성면에서는 Scilab이 훨씬 낫네요. 우리나라나 중국,일본도 MATLAB을 많이 쓰는 것으로 알고 있는데 윈도우버전만 이를 제대로 하는 걸 보면 리눅스사용자들은 무시당한다는 느낌이 계속 드네요. 마이너한 나라에서 마이너한 OS 쓰는 서러움이 느껴지네요. 한국지사에서 신경을 써줬으면 좋겠는데 이 나라에서 마이너OS를 신경이나 써줄까요?


정 안 되면 MATLAB을 안 쓰는 것도 방법이 될 수도 있겠네요. scilab이나 배워볼까....

,





아무래도 요즘은 원격데스크톱을 통해 일을 보는 경우가 많아 졌습니다. 직장이나 학교에 서버를 하나 열어두고 어디서나 그 컴퓨터를 이용해서 일을 하는 것이지요. 덕분에 쉬는날에도 일을 하는 뭐 같은 경우도 늘었다고 하지만 편리한 기능인 것은 사실입니다.


본래 원격데스크톱은 여러가지 프로그램들이 있습니다. 그중 제일 유명한 것은 VNC이고 MS에서 만든 RDP 프로토콜 등이 있습니다. 본래 유닉스의 GUI로 유명한 Xfree86도 워크스테이션의 원격 데스크톱을 위해 만들어진 프로토콜이지만 이쪽은 아무래도 나온지도 오래되었고 호환성도 그닥이라 NX등의 대체 프로토콜로 대체되었고 지금은 그냥 로컬 GUI를 위한 녀석 정도로 이용되고 있습니다. (그나마도 Wayland로 대체 중입니다.)


VNC와 RDP는 그놈의 성능 때문에 참 말이 많았는데요. 압축 기술과 통신 기술의 발전은 이들을 충분히 쓸만하게 만들어 주었습니다. VNC는 윈도우보다는 리눅스나 OSX서버로 접속하는 것이 좋았고 윈도우 서버에서는 기본으로 포함되어있는 RDP가 성능이 잘 나왔습니다. (원격데스크톱은 직접 돌아가는 서버의 성능이 더 중요하기 때문입니다.)


그럼 리눅스에서 RDP로 윈도우에 접속하는 것은 어떤것이 있을까요? 리눅스에서 RDP프로그램은 대략 다음과 같습니다.


xrdp

rdesktop

freerdp

remmina


이중 xrdp는 X를 RDP로 뿌려주는 서버프로그램입니다. 따라서 윈도우에 접속하는 것이 아닌 리눅스에 접속하게 만드는 프로그램이니 일단 목록에서 제외합니다.

rdesktop은 XP시절 꽤나 유명했던 프로그램입니다. 많이 이용되었지만 업데이트가 어느순간 중단되었습니다. 하지만 안정성 하나 만큼은 매우 좋습니다. RemoteFX(원격에서 3차원 가속을 사용하는 기술)가 안 되는 것이 흠이라면 흠입니다.

remmina는 GTK기반으로 GUI로 구성되었다는 것이 장점입니다. VNC와 SFTP등도 지원하는 다방면 프로그램입니다. 렘미나에 대해서는 다음에 알려드리겠습니다. 사실 설명없어도 잘 쓸 수 있게 UI 설계가 잘 되어있습니다.(그런데 RemoteFX가 잘 안 되는 듯 합니다.)


그리고 남은 하나는 오늘의 주인공 FreeRDP(http://www.freerdp.com/) 입니다.

써 본결과 100Mbps 짜리 유선랜 환경에서 딜레이가 거의 없던 것을 확인했습니다. rdesktop은 RemoteFX가 안 되어서 그런가보다 했는데 윈도우-윈도우 환경에서 써본결과 FreeRDP보다 성능이 떨어지는 모습이 보였습니다. 어찌보면 원조를 뛰어넘은 셈입니다.


다 필요없고 한번 써보고 싶다고 하시면 바로 어떻게 쓰는지 알려드려야겠지요?


우선 서버인 윈도우에서 접속을 할 수 있게끔 허용해야 합니다.

윈도우에서 시스템 설정-고급 시스템 설정에 들어가신 뒤 원격 탭에서 다음과 같이 설정해 주셔야 합니다.


원격접속을 하겠다면 무조건 허용하자. Windows에서는 VNC보다 RDP가 낫다.

일단 원격 접속을 허용해주셨다면 이제 우분투에서 FreeRDP를 설치합시다.

기본 저장소에도 FreeRDP가 있지만 최신 판을 써주셔야 성능이 잘 뽑히기 때문에(RemoteFX와 GFX기능 때무입니다.) PPA를 이용해서 설치하도록 합시다. 


sudo add-apt-repository ppa:remmina-ppa-team/remmina-next

sudo apt-get update

sudo apt-get install freerdp


이러면 freerdp-x11이란 패키지를 대신 설치한다고 나옵니다. 보통은 X환경을 사용하니 이게 맞는 겁니다.

그리고 접속을 해주시면 되는데 이게 좀 골 때립니다.

오로지 명령으로 때우기 때문입니다.


터미널에서 다음과 같이 명령을 내려주셔야 합니다.


xfreerdp /v:[서버IP] /u:[Windows 사용자이름] /p:[암호] /gfx /rfx /bpp:24 /w:1280 /h:720 /compression


일단 이것은 예시입니다. 다른 옵션은 다 빼버려도 되는데 /v: 하고 /u: 옵션은 꼭 넣어주셔야 합니다. /p: 는 암호인데 필요하면 물어보기는 합니다.

일단 이것으로 접속이 되기는 합니다. 그런데 엄청 버벅일 겁니다. 당연하게도 뒤에 있는 옵션이 이를 해결해주는 옵션이라 저 옵션도 거의 필수가 되었습니다.


걔중 /bpp: 옵션은 색상입니다. 성능이 딸린다 싶으시면 24대신 16을 써도 됩니다. 성능이 남아도시면 32도 괜찮습니다. /w:하고 /h:는 화면 크기입니다. 클라이언트의 모니터보다 크면 당연히 안되겠지요. 저는 720p(HD)크기를 썼는데 크기는 마음대로 하셔도 상관없습니다. 대충 필요한 만큼 적당히 써주시면 됩니다.


/rfx

/compression

/grx

이제 이 옵션들이 관건인데요.

/rfx :  remoteFX 옵션으로 원격서버에서 3차원 가속이 가능토록 해줍니다. 이제는 필수가 되었습니다. Windows8에서 가속을 안하니 메트로화면이 버벅버벅...

/compression : 말그대로 압축을 하는 겁니다. JPG나 H.264로 압축하는데 네트워크 마비되는 것 보기 싫으시면 당연히 해주시는 것이 좋습니다.

/gfx : 아직 실험적인 기능이지만 성능 향상폭이 엄청 좋습니다! 클라이언트단에서 하드웨어 가속을 사용하는 옵션입니다. 동영상 같은 것이 버벅이지 않고 잘 나오게 하는데 필수적인 옵션입니다.


이외에도 /sound 옵션등이 있는데 man xfreerdp 명령을 통해서 알아보는 것을 추천합니다.


이제 보셨으면 아시겠지만 GUI가 아니라 상당히 불편합니다. 일일이 저걸 다 적어주는 것도 일입니다. 그래서 https://github.com/Gibbio/RDPGUI 여기에서 Rdesktop이나 FreeRDP를 위한 GUI도구를 제공합니다. 이런 것이 있다면 이용해주는 것이 맞겠지요?


자 그럼 FreeRDP+ RDPGUI를 써봅시다.


https://github.com/Gibbio/RDPGUI/archive/master.zip

위 링크를 통해 스크립트를 받도록 합시다. 그러면 다음과 같이 파일들을 볼 수 있습니다.


rdpgui.py 요놈과 rdpgui.ini 요놈이 우리의 핵심이다.

우선 rdpgui.py에 실행 권한을 주셔야 합니다. 오른쪽 버튼을 누르고 속성에 들어가서 권한을 다음과 같이 줍니다. (탐색기 프로그램마다 다릅니다.)


명령으로 때울라면 sudo chmod +x rdpgui.py

그리고 rdpgui.ini 파일을 수정합니다. 기본적으로 이 프로그램은 라즈베리파이를 위해 만들어진 것이라 기본 설정이 Raspbian에 맞게 되어있습니다. 하지만 수정하면 그만입니다.



[DEFAULT]
RDPBinary = xfreerdp
RDPDomain = RPiTC
RDPServer = server1.domain.lan server2.domain.lan test.domain.lan
RDPDomainFlags = /d:
RDPServerFlags = /v:
RDPUserFlags = /u:
RDPPasswordFlags = /p:
RDPDefaulfFlags = /cert-ignore
RDPExtraFlags = /sound:sys:pulse /rfx /fonts


여러가지 수정할 곳이 좀 많습니다. 저는 다음과 같이 수정했습니다.


[DEFAULT]
RDPBinary = xfreerdp
RDPDomain =
RDPServer = 192.168.0.16
RDPDomainFlags = /d:
RDPServerFlags = /v:
RDPUserFlags = /u:
RDPPasswordFlags = /p:
RDPDefaulfFlags = /cert-ignore
RDPExtraFlags = /sound:sys:pulse /gfx /rfx /bpp:24 /fonts /w:1280 /h:720 /compression


RDPServer는 당연히 접속하고자 하는 서버 IP이고 RDPExtraFlags는 위에서 썼던 명령줄을 적어놓은 것입니다. 위에서 설명 안 했던 sound 옵션도 추가했습니다.


/usb 옵션도 추가해 넣었는데 이건 무슨 문제인지 작동을 안 한다. 아마도 권한 문제가 아닐까 생각한다.



그리고 rdpgui.py를 실행하면?



짠! 이제 사용자 계정과 암호를 넣고 접속을 해주시면 됩니다. 옵션을 미리 저장해 놓았기 때문에 Windows의 원격데스크톱 쓰는 마음으로 쓰시면 됩니다.



윈도우즈에 접속이 완료되었습니다. 그래픽가속도 잘 되니 마음껏 쓰시면 됩니다!

,

LXLE에는 기본적으로 들어있지만 Lubuntu에는 들어있지 않은 메뉴 편집기입니다. 메뉴 편집기는 여러가지가 있지만 최근에는 Menulibre가 가장 호평입니다. 그도 그럴것이 보통은 Gnome메뉴만 지원하는데 KDE에서도 상당히 쓸만하며 인터페이스도 깔끔하기 때문입니다.



Menulibre의 모습. Gnome스럽게 굉장히 깔끔하다.


PPA는 여기입니다. ppa:menulibre-dev/daily


sudo add-repository ppa:menulibre-dev/daily

sudo apt-get update

sudo apt-get install menulibre


위 명령어로 설치하시면 됩니다.


다만 여기서 만든 메뉴 바로가기는 ~/.local/application에 만들어지는데

/usr/share/applications 여기에도 바로가기들이 있기 때문에 관리자 권한으로 실행하는 것도 하나 더 있어야 편리합니다. 즉 BleachBit처럼 관리자권한 바로가기 하나와 유저권한 하나 이렇게 두가지로 만들어두셔야 메뉴 편집이 요긴하게 쓰일 겁니다.



/usr/share/applications 여기에다가 바로가기를 하나 더 만들어서 gksu를 붙이자. 이건 관리자 권한으로 실행하는 놈이다.


,

 저는 한동안 Lubuntu를 제 입맛에 맞게 튜닝해서 써왔습니다. 그런데 EFI파티션에 문제가 생겼는지 지난 설 연휴 막바지에 갑자기 부팅이 안되는 상황에 빠졌습니다. 제가 아직 HDD를 쓰고 있던터라 HDD에 충격이 가거나 한 줄 알았는데 다행히도 Live부팅을 하니 데이터는 고스란히 남아있더군요.


이전에 만들어두었던 USB메모리로 EFI를 복구하고 Grub을 다시 올렸는데 여기서 실수 했습니다.


저는 몰랐습니다. EFI부팅을 했다면 EFI부팅을 한 Live리눅스에서 복구를 해야하는 것을 말이지요. 아무래도 LiveUSB는 범용성을 지녀야 하기 때문에 Legacy부트 방식으로 만들어 놓았는데 Grub을 레거시에서 올리니 당연히 Grub을 빠이빠이~ 해버렸습니다. (grub-efi와 grub-pc와의 차이라고 합니다.)

GPT와 MBR(EFI부트는 GPT파티션으로, Legacy부트는 MBR부트방식으로 해야한다네요. 우분투는 그런거 없이 보통 부팅되었지만)간의 차이가 문제를 일으킨다고 하네요.


결국 /home파티션만 살리고 처음부터 다시 시스템을 구축하기로 결정했습니다. /home에서 .config일부와 몇몇 프로그램 설정을 제외하고 일단 숨김폴더는 싹다 지웠습니다. 나머지 파티션도 깔끔하게 포맷하고 어떤 배포판을 올릴까 고민을 했습니다. 처음에는 그동안 편하게 잘 썼던 민트를 생각했었는데 묵직한 느낌이 아직도 있어서 넘어가고 LXDE(LXQT)계열로 생각했습니다. wayland기반의 MauiOS도 시도했는데 AMD라 그런지 GUI가 안 뜹니다. 일단 이건 포기. Arch리눅스도 관심이 많아서 어떨까 했는데 (ArchBang)라이브 만으로도 굉장한 성능을 뿜어주었지만 당장 일처리를 해야하는데 시간이 너무 길어져서 (도로)우분투나 데비안 계열로 가닥을 잡았습니다.


 그러다 이전에 썼던 LXLE가 생각나서 이번에 다시 설치했는데 EFI부트가 지원이 되더군요? 그래서 다시 LXLE로 시스템을 꾸몄습니다. 실컷 설치 하고보니 이전에 제가 쓰던것과 큰 차이가 없네요. Openbox대신 icewm같은 걸로 바꿔볼까도 생각했는데 굳이 그럴 이유는 없을 것 같습니다. Openbox도 안정적이면서 가볍고 TinyWM거라면 모를까 메모리 사용률이 큰 차이가 없었습니다.(TinyWM에 대해서는 나중에 살짝 맛보기 용도로 포스트 해보겠습니다.)


LXLE를 그냥 저냥 쓰고있는데 OS를 새로 설치했다는 느낌이 전혀 안 듭니다. 심지어 제가 튜닝했던 것이 LXLE에서는 그냥 기본 세팅이네요. 일단 느낌은 좋습니다. 홈페이지에서의 소개와는 다르게 가볍다는 느낌은 전혀 안 들지만 Lubuntu를 편리하게 만들었다는 느낌입니다. 어쨌건 블로그 명칭은 안 바꿉니다. LXLE도 어쨌건 우분투 계열이니까요.

,

우분투를 설치할 때 요즘은 당연히 키보드 레이아웃을 한국어로 설정합니다. 한/영키가 따로 없는 노트북은 Alt키가 한영을 대신하는 104키호환으로 설정하고요. 하지만 8.04 시절만 하더라도 한국어가 따로 없어서 미국레이아웃을 사용했습니다. 사실 한국에선느 qwerty기반의 자판을 사용하기 때문에 US자판을 사용해도 사용하는데 지장은 없습니다. 다만 노트북에서 Alt를 한영키로 인식하지 않아 헷갈릴 뿐입니다.


ibus를 사용하는 사람들은 이게 좀 많이 문제를 일으킵니다. 지금은 ibus-hangul이 한국어와 영어 둘 다 입력에 관여하지만 잠시동안은 영문입력모드일 때는 ibus-hangul이 비활성화 된 상태로 된다던지 하는 방법을 사용했습니다. 언제 다시 이 방식으로 돌아갈지도 모르는 상황입니다. 그렇다면 더더욱 키보드 레이아웃을 고정해야겠지요.


키보드 레이아웃 설정 프로그램이 있지만 이게 자주 리셋이 되곤 합니다. 아마도 저장이 안 되는 듯 한데 처음부터 시스템의 키보드 레이아웃을 수정하면 고정시킬 수 있습니다.


/etc/default/keyboard


해당 파일을 수정하면 키보드 레이아웃을 고정 시킬 수 있습니다.


설치할 때 키보드 레이아웃을 잘못 정했거나(FR등으로 하면 난리납니다.)ibus상에서 문제가 일어나는 경우, 한/영 전환시 답답한 상황이 생긴 경우에 이 방법을 사용하면 됩니다.(혹은 Alt키가 어떤 단축키인 경우에도 좋습니다.)


위에서 말한 파일을 관리자 권한으로 엽시다. 어떤 텍스트 에디터도 좋습니다. gedit이나 leafpad 아니면 nano나 vi도 좋습니다. 다만 관리자 권한 즉 sudo를 사용해야 합니다.


sudo gedit /etc/default/keyboard


이런식으로 말이지요.


그리고 파일을 다음과 같이 수정합니다.



위의 것은 일반 키보드이고 아래것은 104키 호환모드 즉, 노트북용입니다. 자신에게 맞는 것을 골라서 똑같이 수정하면 됩니다.

,

아주 간단한 포스트입니다.

우분투 14.04에서 최신 커널로 업데이트를 했는데 Virtualbox가 에러를 일으키는 문제가 생겼습니다.


로그를 보아하니 다음과 같은 내용이 있었습니다.


Creating symlink /var/lib/dkms/vboxhost/5.0.14/source ->
                 /usr/src/vboxhost-5.0.14

DKMS: add completed.

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area....
make KERNELRELEASE=4.4.1-040401-generic -C /lib/modules/4.4.1-040401-generic/build M=/var/lib/dkms/vboxhost/5.0.14/build....(bad exit status: 2)
Failed to install using DKMS, attempting to install without
make KBUILD_VERBOSE=1 SUBDIRS=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 CONFIG_MODULE_SIG= -C /lib/modules/4.4.1-040401-generic/build modules
Makefile:660: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: -fstack-protector-strong not supported by compiler 


저 빨간 부분을 자세히 살펴보면 컴파일러가 지원이 되지 않는 옵션을 사용했다는 것으로 보입니다. 즉 GCC버전이 낮아서 생긴 일입니다. 커널을 컴파일해서 설치했다면 문제가 전혀 없었겠지만 저는 귀찮은 나머지 그냥 패키지로 설치했습니다. 그랬더니 이런 문제가 생기네요.


방법은 GCC를 업데이트하거나 커널을 직접 컴파일해서 설치하는 것입니다. 직접 컴파일은 오래걸리기도 하고 설정하다 시간 다 잡아먹으니 다음에 하기로 하고 GCC를 PPA를 통해 업데이트하는 방법을 써봅시다.


다음과 같은 명령으로 GCC를 업데이트 할 수 있습니다. GCC 4.9버전을 쓴다는 가정입니다.

14.04

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9 g++-4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9



설명은 굳이 안 하겠습니다. ubuntu-toolchain-r PPA를 등록후 GCC를 설치하는 것 뿐입니다.

,

Rollercoaster Tycoon



줄여서 RCT라고도 하지요. 저는 이 게임을 굉장히 좋아했습니다. 당시 돈으로 3만원이 좀 넘었던 것 같은데 이걸 사기 위해 용돈을 모았던 기억이 있습니다. 정말 재미있게 했었는데 최근에는 Rollercoaster Tyccon World! (https://www.youtube.com/watch?v=03tQP6pulHM)라는 신작이 개발되고 있어서 기대작으로 생각되고 있습니다.


하지만 추억은 추억이니 과거작을 한번 플레이 해보면서 각종 술수와 비기(Shuttle Loop..)로 점철되어있던(?) 그 시절을 느껴보는 것도 좋습니다.


OpenTTD라는 게임을 아시는지요? 본래는 Transport Tycoon이라는 Rollercoaster Tycoon이라는 명작을 만들었던 Chris Sawyer의 게임을 리버스 엔지니어링(쉽게 말해서 역으로 분석)해서 추가 기능과 각종 추가 그래픽등으로 만들어낸 게임입니다. Open이 붙었다는 것을 보면 아시겠지만 오픈소스로 만들어졌고 그래픽과 사운드는 Transport Tycoon의 것을 이용하지만 엔진은 완전히 새로운 방식의 게임입니다.


여기에 Ted 'IntelOrca' John 라는 멋진 분이 착안하여 또 다른 Chris Sawyer의 명작 Rollercoaster Tyccon을 이런식으로 만들어보겠다면서 시작한 것이 OpenRCT2입니다.

https://openrct2.org/


본래는 윈도우만 지원한다고 했었지만 2015년 12월에 다른 OS지원을 위한 소스수정중이라고 하더니 2016년 1월 현재 개발버전이지만 0.0.4버전부터 OSX와 리눅스를 지원하게 되었습니다. 문제는 바이너리가 아직도 32비트용뿐이라는 것이지만 OpenSource는 위대하니 64비트지원을 위한 패치도 금방 진행 될 것입니다.


일단 우분투14.04기준 현재 OpenRCT2를 하기 위한 방법을 설명하겠습니다.


일단 준비되어야 하는 것이

1. OpenRCT2 리눅스용 바이너리

https://openrct2.org/downloads


2. Rollercoaster Tyccon 2 Time Thrill Pack (쉽게 말해서 모든 확장팩입니다.)

Rollercoaster Tycoon 2는 스팀이나 GoG.com에서 싸게 구입할 수 있으니 굳이 찾으러 여기저기 안 돌아다니셔도 됩니다. 아니면.. 데모 버전을 사용하셔도 큰 문제가 없습니다.

OpenRCT2 개발자분은 구입 버전을 사용하는 것을 사용하는 것을 추천하지만 데모버전을 사용해도 큰 문제는 없었습니다.


데모버전은 

http://cdn.limetric.com/games/openrct2/misc/RollerCoasterTycoon2TTP_EN.zip

혹은

https://www.dropbox.com/s/rv3ggrqqnz5i6af/RollerCoasterTycoon2TTP_EN.exe?dl=0


여기서 구할 수 있습니다. 아래는 제 드롭박스 계정이니 아래 링크가 깨지면 저한테 연락주세요.


자 이제 RCT2를 설치해 봅시다!

https://openrct2.org/downloads




여기서 리눅스용을 다운로드 받으시면 됩니다.

그리고 압축을 풀면...



휑합니다. 이제 여기에 기존 Rollercoaster Tyccon 2의 데이터를 복사해 넣어야 합니다. 그러기 위해서는 당연히 Rollercoaster Tyccon 2가 있어야 겠지요? 일단 정품이면 wine을 통해 설치하시고 Demo버전이면 압축을 저곳에 풀어넣으시면 됩니다.


요 폴더들만 쏙 복사해서 OpenRCT2가 있는 곳으로 복사하면 된다.


Readme에 나온 내용 Windows만 지원하던 시절에 나온 내용이라 이런식이다. 그냥 블록으로 지정한 이 부분만 신경 쓰면 된다. OpenRCT2가 설치된 곳!

자 이제 실행을 해 볼까요?



libSDL2_ttf-2.0.so.0 파일이 없다고 합니다. 이미 저는 다른 게임들 때문에 설치가 되어 있지만 OpenRCT2가 아직 32비트만 지원하는 터라 32비트 라이브러리를 설치해야 합니다.

만약 32비트 우분투라면 조금 신경을 덜 쓸 수도 있었을 겁니다.


여기에 jansson이라는 라이브러리와 speedxdsp, iconv가 필요하다고 하는데 iconv는 필수이니 신경 안 쓰셔도 될 것이고 speedxdsp도 저한테는 문제 없이 넘어갔습니다.


sudo apt-get install libsdl2-ttf-2.0-0:i386 libjansson4:i386 libcurl3:i386


위 명령어로 일단 필요한 라이브러리를 설치해둡니다.


그런데.....

libpng16이 없다고 합니다!!!!!



이렇게 까지 했는데 결과는 똥망


ubuntu14.04는 libpng12를 사용합니다. 혹시나하고 libpng12를 libpng16으로 링크해봤는데 에러가 나더군요. 그래서 이는 추가로 설치를 하기로 했습니다. 바로 우분투의 아버지 데비안에서 말이지요.


https://packages.debian.org/experimental/i386/libpng16-16/download


여기서 kr.debian.org에 있는 패키지를 받으시는 것이 정신 건강에 매우 좋습니다. 해당 패키지를 설치하고 나면 추후 우분투에서 충돌이 일어날 수도 있지만 그때되면 그때 삽질하면 됩니다. 아니면 OpenRCT2에서 64비트가 지원되면서 충돌이 미리 사전에 방지 될 수도 있습니다.


자 이제 실행을 하면...



이제 실행이 되었습니다. 기존의 RCT2와는 다르게 네트워크플레이가 되는 것을 확인 할 수 있습니다. 참고로 데모버전이나 정품이 영문판이어도 OpenRCT2에서는 한글이 지원됩니다. 


2015. 2. 11 

유튜브 돌아다니다가 다음과 같은 멋진 RCT 타이틀 리믹스를 봤습니다. 이걸 타이틀 음악으로 하면 좋겠다는 생각이 들어서 냉큼 적용해봤습니다. 방법은 아주 간단합니다.


https://www.youtube.com/watch?v=hwnCB6qpYUY


여기 페이지를 보시면 MP3파일을 다운로드 받을 수 있는 링크가 있습니다. 이분께서 상당히 멋진 음악을 만들어 주셨습니다. 그냥 들어도 상당히 좋습니다.

OpenRCT2는 옵션으로 RCT1의 css17.dat파일을 css50.dat으로 파일명을 바꿔서 Data폴더에 넣으면 설정에서 타이틀 음악을 RCT1의 것으로 바꿀 수 있습니다. 사실 오리지널 RCT때도 제가 가요로 바꿔넣기도 하면서 썼던 방법인데 이것을 이용해보았습니다.


우선 http://goo.gl/WwfXF 여기있는 MP3파일을 다운로드 받읍시다. 그리고 이것을 WAV 형태로 만들어야 하는데요. 저는 Audacity를 사용했습니다. PCM16비트면 됩니다.그리고 파일명을 css50.dat로 만든뒤에 OpenRCT2/Data에 넣으면 됩니다. 그리고 OpenRCT2를 실행하고 오른쪽 위에 있는 설정을 눌러서 타이틀 음악을 롤러코스터 타이쿤1으로 바꿔넣습니다. 그러면 저 멋진 기타커버 타이틀로 바뀌게 됩니다. 그러니까 본래 RCT1의 css17.dat파일을 넣어야 하는 것을 제가 임의로 만든 파일로 바꿔치기해서 넣는겁니다. 기타커버가 멋지기 때문에 상당히 잘 어울립니다.



css50.dat파일을 만들어서 옵션에서 롤러코스터 타이쿤1으로 설정하자! (css17.dat 파일로 넣으면 롤러코스터 타이쿤2로 하면 된다.)



같은 방법으로 어떤 음악이든지 바꿀 수 있습니다. 아니면 css19~css40.dat 파일을 바꿔서 놀이기구 음악을 바꿀 수도 있습니다. 지금 RCT2의 데이터를 유용하고 있는 OpenRCT2에서 개인적으로 만들어낸 파일을 사용하면 저작권 관련 논란도 무마할 수 있을 겁니다!



====2018.4.19=====

폰트가 굴림체로 고정되는 것이 아니라 이제 운영체제 기본 폰트로 지정되는 것으로 바뀌었습니다.


따라서 직접 폰트를 지정해줘야 정상적인 사용이 가능합니다.


~/.config/OpenRCT2/config.ini 파일을 열어서 수정을 해줘야 합니다.


제일 아래에

[font]
file_name = "NanumGothic.ttf"
font_name = "나눔고딕"
x_offset = 1
y_offset = -2
size_tiny = 11
size_small = 12
size_medium = 12
size_big = 13
height_tiny = 12
height_small = 14
height_medium = 14
height_big = 16
enable_hinting = true
hinting_threshold = 0


이렇게 적어주시면 나눔고딕으로 지정이 됩니다. 나눔고딕이 기존 굴림과 흡사한 폰트이기 때문에 그 때 그 느낌으로 플레이가 가능합니다.

,


ArandR은 오픈소스 드라이버를 쓰는 그래픽 환경에서 멀티모니터(듀얼모니터)설정을 쉽게 해주는 도구입니다. 커다란 특징이 있다면 모니터마다 해상도를 다르게 준 다음 겹치기를 통해 해상도가 작은 모니터에 일부만 출력 되도록 세팅이 가능합니다.

무슨 말인지 모르겠으면 듀얼모니터를 달고 직접 ARandR을 실행해 보시면 됩니다. 출력 메뉴를 통해 모니터를 활성화 하고 아래에 떠 있는 모니터 화면을 이리저리 움직이시다보면 제 말이 무엇인지 이해가 가실 겁니다.


Windows의 그것과는 다르게 더 직관적이면서 더 자유로운 모니터 세팅이라고 볼 수 있습니다. Nvidia나 Catalyst의 세팅프로그램과 다르게 복제모드와 듀얼모드가 따로 있지 않고 모니터의 위치를 마우스로 설정 할 수있는 것도 장점입니다.


예전에 이 프로그램이 없던 시절에는 듀얼 모니터가 삽질이 따로 없었다고 하는데(일명 xorg.conf 지옥이라고 합니다.) Kernel Mode Setting이 기본 설정이 된 요즘은 이런 좋은 프로그램도 나오네요.

,