원신은 인기있는 게임입니다.

일단 한국어가 지원이 되고 한국어 음성이 지원이 되고 그래픽도 나쁘지 않고 그냥 오픈월드 통틀어서 상당히 수작입니다.

 

하지만 지원 되는 운영체제는 윈도우, 안드로이드, iOS입니다. 하지만 스팀덱 출시이후 많은 사람들이 스팀덱에서 이 게임을 하고자 하였고 결국 성공했습니다.

 

다만... 안티치트를 제거하는 방식이기에 계정밴을 당할 위험이 있습니다. 다들 해당 방식에 대해 경고하고 있습니다.

 

방법은 일단 간단합니다.

https://github.com/an-anime-team/an-anime-game-launcher

 

GitHub - an-anime-team/an-anime-game-launcher: An Anime Game launcher for Linux with automatic patching fixing detection of Linu

An Anime Game launcher for Linux with automatic patching fixing detection of Linux/Wine and telemetry disabling Our discord server: https://discord.gg/ck37X6UWBp - GitHub - an-anime-team/an-anime-...

github.com

위 프로젝트에서 진행하는 런처를 사용하면 됩니다. 정식 미호요에서 지원하는 런처가 아닌 리눅스용으로 따로 만들어진 런처입니다. 해당 런처는 Wine을 설치하고 필요한 패치를 진행해서 리눅스에서 원신을 실행할 수 있게 도와줍니다.

 

Release에 가면 Appimage로 된것을 다운로드 받을 수 있습니다. 이것을 이용하면 편리합니다.

https://github.com/an-anime-team/an-anime-game-launcher/releases

 

Releases · an-anime-team/an-anime-game-launcher

An Anime Game launcher for Linux with automatic patching fixing detection of Linux/Wine and telemetry disabling Our discord server: https://discord.gg/ck37X6UWBp - an-anime-team/an-anime-game-laun...

github.com

물론 Flatpak을 이용해도 좋고 아치리눅스라면 AUR을 쓰는 것이 제일 편할 것입니다. 저는 우분투라서 Appimage 를 사용합니다.

Appimage를 다운로드 받고 속성에서 실행을 허용해주세요.

Appimage파일의 속성에서 권한 탭에 들어가 실행허용 관련 내용을 찾자

그리고 Appimage파일을 더블클릭하면 왠지 공식 런처와 비슷하게 생긴 무언가가 실행됩니다.

그 전에 필요한 패키지를 설치해야 합니다.

 

sudo apt install unzip tar git curl xdelta3 cabextract libnotify-bin

의외로 xdelta3를 제외하고 기본적으로 설치해서 쓰곤 하는 패키지입니다.

 

암튼 실행 후에 30초를 기다리신 뒤에 OK I Understand 버튼을 눌러주세요.

해석하면 "공식 런처가 아니고 정상적인 방법으로 실행되는것이 아니니 모든 위험은 본인이 감수해라" 대충 이런겁니다. 즉, 밴당해도 우리한테 뭐라하지 마라 이겁니다.

화면은 이런 식입니다.

이미 설치 버튼을 누른 상태다....

원신 공식 런처랑 비슷하게 생겼습니다. 다만 언어가 한국어가 아닐 뿐입니다. 우선 Install Wine을 눌러서 Wine을 설치합니다.

그러면 오른쪽 아래에 없었던 톱니바퀴 버튼이 생깁니다.

 

오른쪽 아래에 톱니바퀴를 눌러서 설정을 하나 해야합니다.

다른것보다 Voice Pack 을 한국어로 바꾸는 것이 필요합니다. 기본이 영어라 이걸 안 바꾸면 영어로 말하는 페이몬을 볼 수 있습니다. 역시 페이몬은 한국어로 떽떽 거려야 제맛.

 

그리고 이제 본격적으로 게임설치를 합시다. Install

게임 본편을 다운로드 하기 때문에 꽤 시간이 걸립니다.

 

그 다음 기다리면 Apply Patch 버튼이 생기는데 이게 핵심입니다. 게임이 업데이트되면 패치가 나올때까지 리눅스는 손가락 빨아야 합니다. 해당 패치는 안티치트를 무력화하는 패치이며 많은 분들의 노력과 분석을 통해 만들어 집니다. 아무튼 Patch를 적용하고 Launch버튼을 누르면...

Apply patch버튼이 활성화 되지 않는다면 아직 리눅스에서 실행이 불가능한 것이다. 기다리자...

게임이 실행이 됩니다. 이제 로그인을 하고 윈도우에서와 같이 기다리면 드디어 원신을 리눅스에서 할 수 있게 됩니다.

 

게임 자체는 아무 문제없이 진행이 되며 dxvk로 Vulkan으로 돌아가게 됩니다. 모바일도 아직 OpenGLES 인걸 생각하면 Vulkan모드로 돌아간다는건 엄청난 이득입니다. 윈도우도 DX11이라 DXVK를 쓰면 상당한 성능향상을 본다고 하니까요.

 

암튼 이방법을 쓰면 원신을 리눅스에서 할 수 있긴합니다만...

안티치트 무력화라는 조금 위험한 방식을 쓰고 있기때문에 조심해야 할 것 같습니다.

 

사실 제일 좋은 것은 원신이 스팀덱을 지원하는 것이지만요.

,

안드로이드는 분명 리눅스 기반 맞습니다.

그리고 안드로이드와 리눅스는 분명 호환되는 부분이 많습니다. 그렇기에 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이라는게 커널기반 가상화라는건데 이거 하나만 써도 왠만한 리눅스 기반 가상화는 다 해먹을 수 있습니다. 그리고 레드햇의 전폭적인 지지를 지원을 받고 있기에 요즘의 가상화 서버는 이걸로 돌아간다고 보시면 됩니다.

 

https://linuxhint.com/android_qemu_play_3d_games_linux/

 

How to Run Android in QEMU to Play 3D Android Games on Linux

Android-x86 is a free and open source project that aims to provide Android images for x86 systems. With new features, numerous compatibility patches and bug fixes over Android Open Source Project, Android-x86 is the most robust solution currently available

linuxhint.com

최근에 발견한 것인데 QEMU와 KVM으로 안드로이드의 3D 게임을 돌리는 튜토리얼입니다.

 

대충 요약하면 우선 KVM이 지원 되는지 확인

egrep -c '(vmx|svm)' /proc/cpuinfo

여기서 0이 아닌 다른 숫자만 나오면 됩니다.

 

QEMU 및 KVM 설치 

sudo apt install qemu qemu-kvm
sudo adduser `id -un` kvm

그리고 안드로이드가 설치될 이미지 만들기

qemu-img create -f qcow2 androidx86_hda.img 64G

저는 넉넉하게 64GB를 넣었습니다. 요즘 폰은 1TB 넘어가는 세상이라 64GB는 작은편이지요.

그리고 Android-x86 iso이미지를 다운로드

https://www.android-x86.org/download.html

 

Download | Android-x86

 

www.android-x86.org

그건 알아서 여기서 버전 맞추어 알아서 잘 해주시면 됩니다.

그 다음 iso파일과 위에서 만든 img 파일을 같은 곳에 넣어주고 다음 명령을 실행합니다. 

qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-smp 2 \
-cpu host \
-soundhw es1370 \
-device virtio-mouse-pci -device virtio-keyboard-pci \
-serial mon:stdio \
-boot menu=on \
-net nic \
-net user,hostfwd=tcp::5555-:5555 \
-device virtio-vga,virgl=on \
-display gtk,gl=on \
-hda androidx86_hda.img \
-cdrom android-x86_64-8.1-r3.iso

아래의 iso파일은 다운로드 받은 파일 이름에 맞추어 바꿔주셔야 합니다.

 

그러면 짠하고 QEMU가 실행되면서 안드로이드가 설치화면이 뜹니다.

처음 설치하시는 분은 감이 안 잡히실텐데 Installation 눌러주시고 Create/Modify 눌러주시고 N 눌러주시고 엔터,엔터 W 누르고 yes 순으로 해주시면 됩니다. 그리고 설치가 끝나면 Reboot

 

그 다음에는 안드로이드 폰 쓰시던 그 느낌으로 쓰시면 됩니다.

 

이제 다음부터는

qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-smp 2 \
-cpu host \
-soundhw es1370 \
-device virtio-mouse-pci -device virtio-keyboard-pci \
-serial mon:stdio \
-boot menu=on \
-net nic \
-net user,hostfwd=tcp::5555-:5555 \
-device virtio-vga,virgl=on \
-display gtk,gl=on \
-hda androidx86_hda.img \

이렇게 마지막 줄을 제외한 나머지를 사용하시면 되는데...

 

복잡하죠?

그래서 그냥 이미지와 스크립트를 만들었습니다.

 

 

 

 

https://mega.nz/file/yEUBWQBI#DLBYSNGAAZ6m8AaNOv-J_WOXE4QOC5kTdVHdNI8C4Bs

 

 

1.03 GB file on MEGA

 

mega.nz

 

위 파일을 다운 받아 압축을 풀면

tar.gz파일은 압축파일이니 넘어가고 이렇게 3개의 파일이 나옵니다.

데비안, 우분투 용으로 설명합니다.

우선 qemu_install.sh파일을 실행(터미널에서 실행하세요. 관리자 권한이 필요합니다.)해서 qemu와 kvm을 설치하고 그 다음에 run.sh를 실행하면 그냥 세팅이 완료된 안드로이드가 짠하고 나옵니다.

qemu에서 안드로이드 부팅

만약 아무 화면이 안 뜨신다면 혹시 옵티머스는 아닌지 확인 부탁드리면서 옵티머스를 꺼주시면 됩니다.

Nvidia X server Setting 에서 PRIME Profile을 on-demand로 해주시면 됩니다. 그리고 필요할때마다 가속은 https://moordev.tistory.com/355

 

우분투에서의 Nvidia Optimus

Nvidia Optimus란 기술은 노트북과 같은 모바일 기기에서 배터리를 효율적으로 쓰기 위해 만들어진 기술입니다. 인터넷같이 가벼운 작업은 성능낮은 내장 그래픽으로 돌리고 게임같은 그래픽카드

moordev.tistory.com

여기를 참고

 

이제 그냥 쓰시면 됩니다. Play스토어에 구글로그인을 하고 앱을 설치하시면 됩니다. ARM Traslator도 설치가 되어 있어서 그냥 실행이 될겁니다.

 

흔한 안드로이드 태블릿의 화면 그대로

만약 인터넷이 안 된다면 와이파이 설정에서 VirtWifi 연결해주시면 됩니다. 다만 마우스가 문제가 될겁니다. Ctrl+Alt+G를 누르면 가상머신에 잡힌 마우스가 호스트로 나오게 됩니다. 

 

혹시나 하고 요즘 핫한 게임인

요거 돌려봤는데 아주 잘 되는군요. OpenGL ES 3.0이 되니까 어느정도 커버가 되는것 같습니다.

 

어쨌건 안드로이드 앱플레이어로 상당히 쓸만하지 않나요? 만약 리셋하고 싶다면 압축을 풀어서 img 파일을 덮어버리면 됩니다.

,

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에서 한번 싸아악 돌리면 해결됩니다!

,

우린 HDD보다 SSD가 훨씬 더 빠르고 또 그렇게 될것이라고 믿습니다.

그래서 HDD를 쓰는 PC를 SSD로 바꾸기만 해도 다른 컴퓨터가 되곤 하지요.

 

이번에 제 노트북속도가 영 아니어서 이상하다 싶어서 점검을 하다보니 HDD의 S.M.A.R.T가 심상치 않더군요. 실패목록이 있고 배드섹터도 어느정도 있으며 대체된 섹터가 거의 다 차 있었습니다. 2014년부터 쭉 써왔으니 그럴만 했지요. 노트북이니 여기저기 들고다니기도 했고요.

 

그래서 이 참에 오래된 HDD도 바꾸고 SSD로 넘어도 갈겸(노트북을 새로 사기엔 이 녀석은 너무 쌩쌩합니다. 자잘한 업무에는 지장없음) 새로운 SSD를 넣었습니다.

 

요녀석이 이번에 나 죽어요!를 외치던 녀석이다. 그동안 수고했다.

노트북을 뜯어서 HDD를 적출하고 새 SSD를 사서 Gparted를 이용해서 파티션 복제를 했습니다.

 

이녀석이 이번에 새로 구매한 SSD 1TB짜리다.

파티션 복제는 쉬웠습니다. 라이브 리눅스를 이용하면 Gparted를 쓸 수 있고 이걸 이용하면 파티션 복제는 뚝딱이었으니까요.

 

그런데 문제가 있었습니다.

 

이상하게 SSD로 바꿨음에도 부팅속도가 영 아닌겁니다. 아니 HDD시절보다 더 느려졌습니다. 아무리 HDD라도 1분 이상을 넘긴적이 없는데 2분 이상의 부팅속도를 보이더군요. 처음엔 설정문제인가 싶었는데 알고보니 특정 SSD와 리눅스 커널간의 버그랍니다.

 

https://askubuntu.com/questions/1049693/slow-boot-time-ubuntu-18-04-on-ssd

 

Slow boot time (Ubuntu 18.04) on SSD

I've come back to Ubuntu; I'm on Dual boot (Windows 10/Ubuntu 18.04) on a SSD with no swap partition. I have a problem. While Windows boot time is just a matter of 3-5s, Ubuntu takes 30-40s. I've

askubuntu.com

 

제가 사용한 SSD는 마이크론 MX500입니다. 인기있는 제품이기도 하고 가격도 착한편이라 많이 사용합니다. 그런데 이 물건이 바로 해당 버그가 있던 모델중 대표적인 제품입니다.

 

하지만 리눅스의 좋은 점은 튜닝이 쉽다는 것이고 해당 버그는 우분투 18.04에 있던 버그이니 최신 커널을 사용하는 20.04에서는 해결되었을 가능성이 매우 높습니다. 그냥 참고 하시기 바랍니다.

 

터미널을 엽시다.

 

그리고 다음과 같이 칩니다.

 

sudo nano /etc/initramfs-tools/conf.d/resume

 

 

그리고 로그온 패스워드를 치면 편집창이 뜹니다. 그리고 해당 내용을 다음과 같이 고칩니다.

 

RESUME=none

위 한줄이면 됩니다.

 

저 처럼 기존에 있던 줄 앞에 #을 붙이고 아래에 RESUME=none 이라고 쳐도 되고 그냥 싹 지운다음 한줄을 쳐도 됩니다. 그리고 Ctrl+O를 누르면 저장이 됩니다. 그리고 Ctrl+X를 누르면 다시 터미널 쉘로 빠져나옵니다.

 

 

이제 재부팅!!!

 

부팅속도가 상당히 빨라진것을 알게 될 것입니다.

 

추가.

 

SSD는 /etc/fstab에서 discard 옵션을 넣어줘야 자동 TRIM기능이 작동한다고 합니다. 

SSD를 쓰고 계신다면 /etc/fstab에 defaults라고 써있는 것을 discard,defaults 이렇게 바꿔서 discard 옵션을 추가해주시기 바랍니다. 자동 TRIM은 일주일에 한번꼴로 작동합니다.

,

제가 사용하는 노트북은 오래된 관계로 기가비트랜이 달려있지 않습니다. 오로지 100M급만 사용이 가능합니다. 덕분에 광랜을 달아도 제대로 된 속도 경험이 힘들었는데 이참에 기가비트 랜으로 갈았습니다.


저 포장지는 떼어도 되는데 그냥 새물건 간지(?)를 위해 안 떼고 있다


가격도 뭐... 이 정도면 싸고 제가 이전에 쓰던 녀석도 같은 리얼텍 칩셋이 달려 있었기에 그냥 무난무난하게 쓰고 있었습니다.


속도는 나름 기가비트를 뽑고 있습니다. 그런데 어제 이상할 정도로 핑튐 현상이 심하더군요. 업로드 속도가 비대칭인 이상 좀 구리긴 했지만 이 정도는 아니었습니다.


아주 뭔가 지속적 통신을 하기라도 하면 미친듯이 출렁거리더군요. 그당시에 제가 CPU많이 처먹는 작업을 해서 그렇긴 합니다만 좀 심하게 출렁거렸습니다. 스마트폰보다 더 네트워크성능이 더 구렸을 정도...


아무래도 리얼텍이 드라이버 만듦새로 꼭 문제를 일으키곤 했으니 혹시나 하고 찾던 도중 중요한 사실을 알았습니다.


우분투 18.04에 포함된 기본 커널 드라이버의 버전이 낮다는 것.

원래 리눅스란 놈 자체가 서버에서 구르기 때문에 무조건 신버전이 좋은 것이 아니긴 합니다. 그런데 제가 쓰는 커널이 4.18임에도 불구하고  2016년에 배포한 소스쓴다는 것!



modinfo로 확인해보니 1.09버전을 쓰고 있었습니다. 인터넷 조금만 뒤져봐도 해당 버전 잘 안 된다는 말이 많습니다. 엄연히 말하면 1.09 주변 버전이 잘 안 된다는것이지만 (리얼텍은 이상할 정도로 버전에 민감합니다.) 아무튼 해당 시기에 좀 문제가 많았습니다.


그래서 드라이버를 갈아버리기로 결심했습니다. 여차하면 커널 모듈을 되돌리면 그만이니까요.


https://www.realtek.com/en/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-usb-3-0-software


이곳으로 들어가서 소스코드를 다운로드 받도록 합시다



아래로 쭉 내리면 Linux용 드라이버 다운로드 아이콘이 있고 이메일을 적으라고 합니다. 아무래도 과도한 서버요청을 막기위한 조치인 듯 합니다. (리얼텍 제품이 한둘이 아니니 과도한 서버요청은 회사 입장에서도 어렵겠지요)


그리고 조금 기다리면 이메일이 날아오고 중간에 Capcha를 하면 다운로드를 받을 수 있게 됩니다.


그리고 컴파일러와 일부 라이브러리가 필요한데 저 같은 경우에는 이것저것 이미 다 설치가 되어있던 상황이라 얼마나 필요한지는 잘 모르겠습니다.


일단 build-essential, libelf-dev, linux-header 는 필수라고 봐야합니다.


sudo apt install build-essential libelf-dev linux-headers-generic


linux-headers-generic 패키지는 상황에 따라 필요 없을 수도 있습니다. 보통 커널을 자신이 직접 컴파일 하는경우에는 자신의 이름으로 설치가 되어 있습니다.


이제 드라이버가 있는 곳에서 


make -j2


뒤에 j 옵션은 필요할 수도 있고 필요 없을 수도 있습니다.

상황에 따라 j뒤를 바꿔 주세요.


그 다음 ko 파일이 있는 것이 확인 되면 


sudo make install


이제 버전이 바뀌었는지 확인해봅시다.



2.11 버전으로 바뀌었군요! 얼마나 좋아진것인지는 알길이 없지만 아무튼 버전이 바뀌지 기분이 색다르긴 합니다

,

Unity3D는 매우 훌륭한 게임엔진이고 성공한 게임엔진입니다. 그리고 정말 많은 분야에서 사용중입니다.


그러나 Unity3D로 게임을 개발을 하기 위해선 윈도우나 맥OS환경이 필수 였습니다. 하지만 Unity3D측에서도 실험적으로 리눅스용을 만들고 지원하고 있습니다. 명색이 다용도 엔진이기 때문에 리눅스용 게임도 만들 수 있는데 개발도 리눅스에서 할 수 있게 하기위한 방법인 것입니다.


물론 경쟁자인 Unreal엔진이 비슷한 노선을 취하기 때문인 것도 맞는 것 같습니다.


Unity3D는 버전별로 상이한 방식을 취하기 때문에 여러 버전을 설치하는 것이 당연시 되고 있습니다 .이를 관리하기 위해서 UnityHUB란 것을 만들었고 최근에는 개발 환경을 이것으로 갖추고 있습니다.


https://forum.unity.com/forums/unity-hub.142/


이곳으로 들어가시면 알 게 됩니다.



해당 포럼에 들어가면 UnityHub XXX is available!! 이런 식으로 써 있습니다. 그 글을 클릭 하면..



이렇게 3대 OS용 UnityHub를 다운로드 받을 수 있게 되어있습니다. 여기서 리눅스도 다운로드 받을 수 있게 되어있습니다. 그리고 이를 다운로드 받으면..


Appimage 형태로 다운로드 됩니다. 즉, 리눅스 배포판을 가리지 않고 실행 되는 방식입니다. 속성에서 


그리고 일반적인 프로그램 실행하듯 실행해 주시면 됩니다. 메뉴에 등록할거냐고 물어보는데 저는 그냥 귀찮아서 등록을 안 하는 것을 선호합니다. 그건 알아서 선택하시기 바랍니다.


그리고 계정 로그인을 하고 잠시 기다리시면...



이렇게 엔진 개발환경을 다운로드 받을 수 있습니다. 

심지어 필요한 컴포넌트도 다운로드가 가능합니다. 굉장히 편리하지요. 그러면 Unity3D 개발환경을 구축 할 수 있게 됩니다. 설치 위치는 톱니바퀴 모양을 누른다음 설정에서 건들 수 있습니다. 물론 권한이 있어야 가능하겠지요?


개인적으로 /opt 안에 폴더를 하나 만든 다음 권한을 따로 주는 것을 선호하지만 ~/안에 설치하는 것을 선호하는 사람도 있을 것입니다. 그것은 취향차이라고 합시다.


이제 프로젝트 탭에서 프로젝트를 하나 만들고 실행해 봅시다.


그러면 짜잔!! 이제 리눅스용 unity3D를 설치할 수 있게 되었습니다. 짝짝짝


추가로 만약 에디터 환경이 너무 느리다 싶으면 OpenGL대신 Vulkan을 사용해 볼 수 있습니다. 확실히 Vulkan이 속도가 빠릅니다.


방법은 Edit-Project Settings

한글판의 경우에는 다르게 나올 수 있다. 하지만 보통 이런 툴은 영문판을 쓸 테니 영문으로 설명한다 알아서 따라오자


그 다음에 Player 탭에서 아래로 쭉 찾아서 Rendering을 찾은 다음 Auto Graphic API for Linux에 체크를 해제합니다. 어차피 윈도는 DirectX11로 고정이고 macOS도 Metal로 고정입니다. 리눅스만이 OpenGL과 Vulkan 두가지를 지원합니다.


그리고 나온 창에서 OpenGL Core가 위에 있을 텐데 Vulkan을 OpenGL Core위로 땡겨서 OpenGL보다 Vulkan이 우선되도록 합니다. OpenGL이 위에 있는 이유는 호환성 때문인데 (구형 VGA는 지원이 안 됨) Vulkan이 이러나 저러나 빠르기 때문에 Vulkan을 추천합니다.


이제 리눅스에서도 Unity3D 엔진으로 이용한 게임 개발이 쉬워졌습니다.


참고로 C# 에디터가 필요하다면 개인적으로 VSCode를 설치하시는 것을 추천합니다. MonoDevelop보다 깔끔하더군요. 그리고 VSCode를 cs파일을 열때 기본으로 설정해두면 Unity3D에서 스크립트를 수정할 때 유용합니다.


VSCode를 설치하는 방법은 따로 검색하시는 것을 추천합니다.

,

우분투 18.04 이후 kdenlive의 업데이트가 뚝 끊겼습니다.

kdenlive측에서는 우분투는 appimage로 패킹된 버전을 쓰라고 하더군요. 어쩐지 우분투 저장소에 있던 버전이 낮다 싶었습니다.


kdenlive의 우분투 계열은 Appimage로 된 버전을 다운로드 받아서 쓰는 것을 추천한다.

아마도 QT와의 호환문제 및 테마 문제로 인해서 (kde 관련 패키지가 어마어마하게 따라옴)이러한 Appimage 버전을 추천한 것 같습니다.


그러나 이 Appimage버전은 한글 입력이 안 된다는 겁니다!!!

그동안 저는 노가다로 복사 부여넣기를 했는데 원인이 알고보니 여기 있더군요.


https://github.com/qTox/qTox/issues/5320


전혀 다른 프로그램이지만 힌트를 여기서 얻었습니다. 일부 Appimage버전의 경우 libfcitxplatforminputcontextplugin.so 파일이 누락되어서 fcitx 사용자의 경우 한글 입력이 되지 않는 현상이 있다는 것입니다.


해당 라이브러리를 정해진 위치에서 찾아다 넣어만 주면 되는 겁니다.


방법은 Appimage파일을 열고 해당 파일을 찾아서 넣은 다음 다시 패키징을 하면 됩니다.


푸는 것은 kdenlive의 appimage파일만 있으면 되고 다시 묶는 것은 appimagetool만 있으면 됩니다.


https://github.com/AppImage/AppImageKit/releases

여기서 appimagetool의 Appimage파일을 다운로드 받으세요. 요즘은 보통 64비트니까 x86_64버전을 다운로드 받으면 됩니다.

32비트라면 i686을 다운로드 받으면 됩니다.


그리고 아까 다운로드 받은 appimagetool과 kdenlive Appimage파일을 같은 곳에 두고 둘 다 실행 권한을 줍시다. 속성에 들어가서 프로그램으로 실행 허용을 주면 됩니다.


자 이제 Appimage파일들이 있는 곳에서 터미널을 열고 다음과 같이 명령을 줍시다.


./kdenlive-18.08.2-x86_64.AppImage --appimage-extract

이러면 squashfs-root라는 폴더가 생기면서 kdenlive의 Appimage 파일의 압축이 풀리기 시작합니다. 


명령어 한번에 압축이 풀린다.

이 안을 들여다보면 우리가 사용하는 시스템의 루트와 똑같다는 것을 알 수 있습니다.

만약 정상적으로 fcitx환경이 설치된 시스템이라면


/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts
여기에 libfcitxplatforminputcontextplugin.so 파일이 있을 것입니다. 만약 없다면 우분투 기준 fcitx-frontend-qt5 패키지를 설치하시면 됩니다.


이 파일을 복사해서 squashfs-root내의 같은 위치에 넣어주면 되는 것입니다.

Applimage들 있는 곳/squashfs-root/usr/lib/qt5/plugins/platforminputcontexts

이곳에 들어가면 파일이 하나 부족한 것을 알 수 있습니다. ibus용만 들어있지요. 하지만 ibus는 제가 별로라서 안 씁니다.



여기에는 파일이 하나 부족하다



여기에 libfcitxplatforminputcontextplugin.so 파일을 복사해서 넣습니다.


그리고 다시 Appimage를 만들면 되는 겁니다.


아까 Appimage가 있던 터미널에서

./appimagetool-x86_64.AppImage squashfs-root

이렇게 명령을 내리면...



Appimage 파일을 만들기 시작합니다.


이제 이것을 실행해보면...

kdenlive에서 한글 입력이 됩니다!!!!


그러니까 방법은 하나입니다. 누락된 해당 파일을 넣어달라고 하거나 yml파일을 수정해달라고 넣거나... KDE팀에게 요청을 해야겠습니다.


일단 그동안 임시로 제가 수정한 Appimage버전을 사용해주세요.


https://drive.google.com/file/d/1NVgcCq0sYQHzoOoSE6qALB44NQcuGIBi/view?usp=sharing


Appimage로 된 것이니 그냥 다운로드 받은 다음 실행 권한을 주고 실행하면 됩니다.

,

요즘에는 다들 스마트폰을 들고 다닙니다. 심지어 폴더형 스마트폰도 나와서 기존 피쳐폰 사용자들도 스마트폰으로 바꿀 수 있게 되었습니다. (폴더형 스마트폰과 피쳐폰도 구분 못하면 그냥 관심이 없는 사람인 겁니다.)


하지만 그만큼 스마트폰의 교체 주기가 짧아지고 구형 스마트폰이 갈 곳을 못 찾고 있기에 그것을 어떻게 해야 써먹을 수 있을지를 생각해야 했습니다.


제일 간단한 것은 전화기능만 안 되지 인터넷은 잘 되니까 별도의 인터넷 단말기로 쓰는 방법이 있습니다. 사실 인터넷은 아무런 문제가 없지요.

또 다른 것은 영상 재생도 아주 잘 되니까 Kodi를 설치해 영상 재생용 단말기로 써도 됩니다. 아니면 에뮬레이터를 설치해서 게임머신으로 만들어도 됩니다.


하지만 이 모든 것은 굳이 구형 스마트폰이 아니고 지금 사용하는 것으로도 가능합니다.

저는 그냥 이런 용도로만 쓰고 있습니다.

네 시계입니다. 그냥 시계...

라이브 월페이퍼를 설치해서 그냥 뭔가 꼬물락 거리면서 움직이는 시계...

(어차피 안드로이드 2.3이고 버전이 너무 낮아 뭘 쓸 수가 없어요.)


하지만 이러한 스마트폰들을 제대로 쓸 수 있는 방법이 하나 있습니다.


안드로이드에 리눅스를 설치하면 서버로 쓸 수 있거든요.


안드로이드도 리눅스이기 때문에 chroot가 먹힙니다. 그렇기에 이미 우분투나 데비안을 설치 할 수 있는 방법이 나와있습니다. 플레이스토어에 가면 Debian noroot란 앱이 있어서 데비안을 스마트폰에 설치가 가능합니다. 심지어 X도 설치가 가능해서 GUI도 가능합니다.

https://play.google.com/store/apps/details?id=com.cuntubuntu&hl=ko


이것을 이용하면 데비안을 설치하고 이것저것 서버를 설치해 사용이 가능하다는 의미가 됩니다. 심지어 PC보다 전기도 훨씬 적게 먹는 셈입니다. 그리고 배터리가 무정전공급장치 역할을 해주기 때문에 정전에도 강한 서버가 되는 것입니다.


무엇보다 웹서버정도는 성능에 크게 구애받지 않기 때문에 쓰는데 아무런 지장이 없습니다. 아니면 스마트폰을 여러대 묶어서 계산용 노드로 쓸 수도 있지요. JRE가 오픈소스로 공개된 이후 OpenJRE가 스마트폰에 쓰이는 ARM도 지원을 하거든요. Python을 설치해서 Python앱도 실행이 가능하니 나중에는 다용도로 사용이 가능해질겁니다.


스마트폰은 하드웨어가 튼튼하기 때문에 PC보다 더 험하게 사용하는 것도 가능합니다. 발열도 적으니 뭐... 이만하면 최고의 장난감 아니겠습니까?

,

Firefox나 Chrome은 초기 구동속도가 매우 느립니다. 처음에 메모리에 올려야 하기 때문인데요. HDD를 쓰는 경우 속도가 더더욱 느려서 처음에 속도가 상당히 느려서 상당히 답답함을 느끼시는 분이 많습니다.


제 시스템에서는 Firefox가 약 10초 Chrome은 40초정도의 초기 실행 성능을 지니고 있습니다. 솔직히 10초는 기다릴만하다고 생각했는데 Windows에서 IE나 Edge를 실행해보셨던 분들은 아시겠지만 얘네들은 바로바로 실행되는 모습을 볼 수 있습니다. 이유야 당연하게도 Windows에서는 미리 컴포넌트들이 메모리에 올라가 있기 때문입니다. 그래서 Chrome은 이명이 느긋한 돼지라는 별명을 지니고 있습니다. Firefox는 여우답게 날렵했지만 Chrome과의 렌더링 속도에서 져버린 이후 Chrome과 같이 초기 구동 속도가 느리지만 웹렌더링 속도를 올리는 방식을 사용합니다.


그럼 방법은 뭐가 있느나...


Chrome의 경우 처음 실행 후에는 다시 실행을 해도 금방 실행이 되는 모습을 보입니다. 왜냐하면 모든 창을 다 꺼도 백그라운드에서 숨을 죽이고 있기 때문입니다.


아래 그림과 같이 말입니다.


크롬은 한번 실행 후에 백그라운드에서 대기를 타는 방식을 사용한다.

이렇게 하면 체감 속도가 엄청 향상되는 효과를 얻습니다. 역으로 말하면 다른 브라우저들도 백그라운드에서 미리 실행을 해두면 웹브라우저를 빠르게 실행이 가능하다는 의미가 될 수 있습니다. 요즘에는 메모리관리를 열심히 해주지 않아도 충분히 사용이 가능한 시대이기 때문에 자주 쓰는 프로그램을 미리 실행해두는 것도 나쁜 생각이 아닙니다. Chrome이야 그렇다 치지만 Firefox는 메모리도 적게 먹으니까 백그라운드에 실행해 두었다고 해도 문제될 것은 없습니다.


http://hamonikr.org/board_aMBI05/52629


여기서 바람곰돌님이 초기 브라우저 속도가 너무 느리다면서 나온 이야기입니다. 그래서 제가 인터넷을 검색해서 Firefox를 백그라운드에서 실행하는 방식을 추천했지요.


https://askubuntu.com/questions/853891/how-can-i-make-firefox-run-in-the-background-like-chromium


여기에 나온방식으로 스크립트를 만들고 Firefox를 컴퓨터 실행 후에 백그라운드로 실행하니 4초만에 실행이 되면서 편하게 사용이 가능해졌다고 하시더군요.


그래서 이렇게 된 거 여기에 이 방식을 한국어로 소개하려고 합니다.


#!/usr/bin/env python3
import subprocess
import os
import signal
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3
import time

app = "firefox"
winsdir = os.path.join(os.environ["HOME"], ".config/hidden_windows")

try:
    os.mkdir(winsdir)
except FileExistsError:
    pass

def checkruns(app):
    try:
        return subprocess.check_output(["pgrep", app]).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        for w in os.listdir(winsdir):
            if w.startswith(app):
                os.remove(os.path.join(winsdir, w))

def get_currentwins(pid):
    wins = subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8").splitlines()
    return [l.split()[0] for l in wins if pid in l]

def hide_currentwins(matches):
    # open(os.path.join(winsdir, "windowlist"), "wt").write("\n".join(matches))
    for w in matches:
        open(os.path.join(winsdir, app+"_"+w), "wt")
        subprocess.Popen(["xdotool", "windowunmap", w])

def run_app(app):
    subprocess.Popen(app)
    while True:
        time.sleep(1)
        pid = checkruns(app)
        matches = get_currentwins(pid) if pid else None
        if matches:
            hide_currentwins(matches)
            break

def restore_wins():
    for w in [w for w in os.listdir(winsdir) if w.startswith(app)]:
        wid = w.split("_")[-1]
        subprocess.Popen(["xdotool", "windowmap", wid])
        os.remove(os.path.join(winsdir, w))

def toggle_app(*args):
    pid = checkruns(app)
    if pid:
        matches = get_currentwins(pid)
        if matches:
            hide_currentwins(matches)
        else:
            restore_wins()
    else:
        subprocess.Popen(app)

run_app(app)

class Indicator():
    def __init__(self):
        self.app = 'toggle_app'
        self.indicator = AppIndicator3.Indicator.new(
            self.app, app,
            AppIndicator3.IndicatorCategory.OTHER)
        self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)       
        self.indicator.set_menu(self.create_menu())

    def create_menu(self):
        self.menu = Gtk.Menu()
        item_toggle = Gtk.MenuItem('Toggle '+app)
        item_toggle.connect("activate", toggle_app)
        self.menu.append(item_toggle)
        sep1 = Gtk.SeparatorMenuItem()
        self.menu.append(sep1)
        item_quit = Gtk.MenuItem('Quit')
        item_quit.connect('activate', self.stop)
        self.menu.append(item_quit)
        self.menu.show_all()
        return self.menu

    def stop(self, source):
        Gtk.main_quit()

Indicator()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()





우선 이 방식은 Firefox를 wmctrl을 이용해서 보이지 않게 뒤로 실행하는 방식입니다.

따라서 wmctrl과 xdotool이 필요합니다.


sudo apt-get install wmctrl xdotool


그 다음 python3를 이용해서 firefox를 실행한 후 wmctrl에게 프로세스 ID를 넘겨 보이지 않게 하는 것입니다. 뭐... 이건 그냥 쓰시는 분께는 어려우니까 자세한 설명은 하지 않겠습니다.


위의 스크립트를 복사해서 firefox_bg.py 라고 만들어둡시다.


물론 Python3는 당연히 있다고 생각하고 만드는 것입니다.

해당 스크립트는 만들고 싶은 곳에 만들어 두시면 됩니다.

저는 ~/.firefox_bg/ 에다가 만들었습니다.


그리고 시작프로그램에 해당 스크립트를 실행하게끔 등록합시다.

LinuxMint나 우분투에서는 시작프로그램을 설정 창을 통해 설정할 수 있습니다.


여기서 추가버튼을 누르시고


이름은 마음대로 알기 쉬운 것으로 해주시고

명령은


/bin/bash -c "sleep 5 && python3 ~/.firefox_bg/firefox_bg.py"


이렇게 해둡시다.

뒤의 ~/.firefox_bg/firefox_bg.py 는 제가 해당 위치에 스크립트를 만들어 두었기 때문입니다. 여러분들은 여러분들에게 맞는 위치를 지정해주세요.


설명 부분은 비워도 됩니다.


이제 등록이 되면... 한번 시스템을 껐다 켜 봅시다.


Firefox가 크롬처럼 미리 메모리에 올라와 있습니다. 생각보다 메모리 먹는 양은 많지 않습니다.


그리고 한 가지 더 생각해야 할 것이 있는데 의외로 우리는 웹브라우저를 제일 많이 사용한답니다. 그러니까 Firefox를 미리 메모리에 올렸다고 해도 문제될 것이 없습니다. 물론 크롬을 주로 사용하신다고 하면 Chrome을 이런 식으로 실행해두는 것도 방법입니다.

,

discord 이전에 자주 사용되었던 팀보이스와 스카이프를 대신 할 수 있는 훌륭한 목소리 채팅 프로그램입니다. 음질은 팀보이스보다 훨씬 좋고 딜레이는 스카이프수준입니다. (제일 가까운 서버가 일본에 있어서 이 정도지 더 빠를 수도 있습니다.)


요즘에는 리눅스에서도 게임을 자주 하기 때문에 디스코드를 사용할 일이 많은데 우분투계열에서 Discord를 사용하는 방법을 간단하게 알려드리겠습니다.


다만, 약간 속은 기분이 들지도 몰라요.


https://discordapp.com/download

이쪽으로 접속합시다.



그러면 알아서 OS에 맞춰서 데스크톱앱을 다운로드 할 수 있게 해줍니다. 우분투에서 쉽게 설치가 가능하도록 deb으로 배포하고 있습니다. 물론 Deb이 지원 안 되는 배포판에서도 사용 가능하도록 tar.gz도 배포하고 있습니다.


deb을 다운로드 받으면 그냥 설치가 가능하겠지요. 설마 이것도 못하는 사람은 없을 것이라고 봅니다...


터미널을 사용하는 변태는

sudo dpkg -i discord*.deb


물론 그냥 마우스로 실행해서 설치하는게 제일 빠릅니다.


그리고 실행하면 그냥 별 문제없이 됩니다....


그리고 한번 로그인하라고 브라우저가 실행되는데 그냥 디스코드에 가입하고 로그인하시면 됩니다. 쉬워요.


그러면...


네 끝났습니다. 이제 그냥 쓰시면 됩니다. 나머지는 discord 사용방법만 아시면 됩니다.


그런데 이게 가능한 이유를 알면 황당하실지도 몰라요.

사실 이건 HTML5의 위엄입니다.


자세히 보시면 따로 데스크톱앱을 설치하지 않고도 웹브라우저에서 사용이 가능 한 것을 알 수 있는데 그게 HTML5를 쓰기 때문입니다. 그럼 데스크톱앱은 뭐냐... 그냥 자체 브라우저 만들어서 띄운겁니다. 끝이에요.


제가 속은거 같은 기분이 들지도 모른다고 한 이유가 이겁니다. 하지만 이게 기존 스카이프나 팀보이스보다 더 성능이 좋다는 것...


아무튼 우분투에서 디스코드를 사용 할 수 있습니다. (뭔가 정말 속은 기분이야...)

,