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


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


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

또 다른 것은 영상 재생도 아주 잘 되니까 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을 이런 식으로 실행해두는 것도 방법입니다.

,

뿌요뿌요 테트리스...

PuyoPuyo Tetris. 2018년 현재 가장 최신판 테트리스이자 뿌요뿌요인 게임입니다. 판권을 둘 다 세가가 갖고 있어서 나올 수 있었던 희대의 콜라보레이션입니다.




현실은 고인물 게임이지만...

아무튼 이걸 Linux에서 굴릴 수 있게 Wine으로 실행해 보게습니다.


Wine을 쓰려면 역시 이 프로그램이 제격이지요. PlayonLinux입니다.


sudo apt install playonlinux


PuyoPuyo Tetris는 DirectX11을 요구하고 64비트에서 구동하는 게임입니다. 그러니까 일단 DirectX11이 되어야 하므로 Wine3.5이상에서 굴러가야 하고 PC가 64비트여야 합니다. 요즘은 다 64비트니까 보통은 굴러가겠지요. 


그럼 PlayonLinux를 실행합니다. 그리고 Wine-Staging으로 굴릴 수 있다면 그것이 더 좋을 것입니다.


도구-Wine버전 관리로 들어갑니다.



여기서 와인버전은 amd64에서 3.10-staging 정도로 해서 설치합니다. staging으로 해주면 상대적으로 성능이 더 낫더군요. dxvk라 해서 DirectX11을 Vulkan으로 변환해주는 것도 있는데 제 PC에서는 안 돌아가더군요. (Vulkan 지원이 아직 안 되는 것일지도 모릅니다.) 일단은 그냥 기본으로 합시다. 어차피 2D게임이라 크게 성능 안 잡아 먹습니다.


그리고 위에서 구성 버튼을 누릅시다.


여기서 새로만들기 버튼을 눌러서 새로운 Prefix를 만듭시다.


그 다음 마법사를 써서 아래 스크린샷과 같이 진행합시다.


당연히 64비트로 해야지요? 게임이 64비트에서 굴러가니까요.

DirectX11 지원을 위해선 3.5이상이 좋다. 여기선 3.10-staging을 선택하자.

이름은 마음대로.

이렇게 하고 필요한 것을 추가해야 합니다. 대표적인 것이 당연하게도 Steam이고 xact(xaudio2_7.dll)입니다.


그럼 그것을 PlayonLinux로 추가해봅시다.

구성에서

아까 만든 Prefix를 왼쪽에서 선택한 다음 오른쪽의 구성요소선택에서 Steam을 눌러 우선 Steam을 설치합니다. 그리고 xact를 눌러서 xaudio2_7 라이브러리를 설치해주셔야 합니다. DirectX9 2010 JUN 버전에서 DLL을 빼낸다음 따로 설치하는 방식을 씁니다.


그다음 이를 네이티브 설정해야 합니다. Wine설정에서 이를 해야합니다.

와인구성 혹은 Wine구성을 누른 다음 xaudio2_7을 적은 다음 더하기 버튼을 눌러서 설정을 합니다. 아래의 dwrite나 gameoverlayrenderer는 Steam설치 시 설정 된 것입니다.


그다음 편하게 하기 위해 바로가기를 만듭시다.



Steam.exe의 바로가기를 만들면 됩니다.



그리고 Steam을 실행하면


단! 그냥 설치 후 바로 실행하면 난감한 일이 일어납니다. Steam이 설치된 것의 ~/PlayOnLinux's virtual drives/PuyoPuyoTetris/drive_c/Program Files (x86)/Steam/steamapps/common/PuyoPuyoTetris에 들어가면 


_CommonRedist_란 폴더가 있습니다. DirectX와 기타 라이브러리가 들어있는 폴더입니다. 하지만 Wine에서는 이게 있어봐야 좋을게 없으므로(아까 PlayonLinux로 다 처리했습니다.) 이걸 삭제해 주시기 바랍니다.


이 폴더는 삭제하자.

그리고 실행하면...


약간의 시간이 흐른 뒤에 세가 로고가 나오면서 실행이 됩니다!!


리눅스에서 실행완료!!

참고로 온라인매치도 아무 문제없이 잘 됩니다.


리눅스에서 실행은 어렵지 않지만 문제는 고인물 게임인게 문제...

,

https://drive.google.com/open?id=1O5SLc6hdE6UgkTRzJIR2NSgKfjvXoO6L


MD5: 511fe57e427757adf362011468bf2ab2  linuxmint-19-mate-64bit-Moordev.iso



위 주소로 다운로드 받으시면 됩니다.


그동안 한국어 설정이 된 버전을 자주 배포했지만 저번 ubuntuMATE버전의 피드백을 받아 이번에는 수정을 최소화 했습니다.


기존 리눅스민트와 다른점은 다음과 같습니다.


1. 한국어 설정이 완료되어있습니다. 한국어 언어팩도 기본으로 설치되어있습니다.

2. 나눔폰트와 Noto폰트 그리고 스팀게임의 한글을 위해 wqy-ttf-zenhei가 설치되었습니다.

3. 한글입력기를 fcitx로 기본 설정되어있습니다.

4. ALZ, EGG압축해제를 위해 Arkzip이 설치되었습니다. 파일탐색기에서 arkzip으로 열기를 하시면 ALZ와 EGG압축을 풀 수있습니다.

5. HWP를 열기 위해 한글뷰어를 설치했습니다.

6. 결국 피드백을 받아 Firefox용 Adobe-FlashPlugin을 설치했습니다.

7. 기본으로는 빠져있는 코덱을 사전 설치했습니다.

8. Windows10테마를 추가는 하였으나 기본 설정하지는 않았습니다.

9. 사진작가 허태무님의 사진을 기본 배경으로 설정 및 추가했습니다. (https://www.instagram.com/pho_taem/)

10. Bleachbit를 설치했습니다.


11. Gabia폰트, Spoka폰트, 서울폰트를 추가했습니다.

,

Wine으로 Steam을 굴리는 일은 생각보다 많습니다. 사실 대다수 게임들이 Windows용으로만 나오기 때문에 Wine에서 Steam을 굴려서 Windows용 게임을 굴리곤 합니다.


하지만 당연히 삐그덕거리는 것은 여전해서 많은 문제가 일어나곤 합니다.


간혹 Steam을 Wine에 설치해서 사용할 때 Steam의 서버에 접속이 안되는 경우가 있습니다. 로그인은 되는데 정작 게임의 다운로드가 안 되는 경우입니다.


사실 저만 겪은 것이 아니라 많은 분들이 겪고 있는 현상이더군요. Wine3.10이후 현재 버전에서 많이 겪고 계십니다.


https://oluadebari.com/2018/06/23/playonlinux-steam-content-servers-unreachable-and-fixing-mirrors-edge-resolution-issue/


여기에 해결방법이 나와있는데 저는 그냥 제 방식으로 했습니다.


일단 Wine의 Steam폴더로 들어갑니다.


Wine의 Virtual Drive/drive_c/Program Files(x86)/Steam/config


이렇게 들어가면

config.vdf 파일이 있습니다. 이걸 텍스트 에디터로 엽니다.


그러면..


제가 블록을 친 CS 어쩌고란 부분이 없을 것입니다. 이걸 넣으면 되는 겁니다.


                "PercentDefaultWebSockets"        "50"


이렇게 쓰여진 부분 아래에 다음파일의 내용을 복사해서 넣습니다.


Steam_CS.txt



이제 다운로드가 잘 됩니다!!!

,