Create TOC

2014년 11월 14일

Debian/Box.com mount 설정

이 문서는 Debian에서 Box cloud를 mount 하는 방법에 대해서 기술한다.

사용자 계정은 편의상 davtest 로 한다.

준비

필요한 패키지 설치

$ sudo apt-get install davfs2 fuse

대상 경로 생성

$ mkdir /home/davtest/box

설정

dav 인증 설정

아래 내용을 ~/.davfs2/secrets 파일로 저장한다.

https://dav.box.com/dav   

저장 후 파일 접근 권한을 변경한다.

$ chmod 600 ~/.davfs2/secrets

그룹 설정

davfs2 그룹에 사용자를 추가한다.

$ sudo usermod -aG davfs2 davtest

fstab 수정

/etc/fstab 파일에 아래 내용을 추가한다.

https://dav.box.com/dav    /home/davtest/box   davfs   rw,noexec,noauto,user,async,uid=davtest,gid=davtest 0   0

만일 부팅시 자동으로 mount 하고 싶다면 아래처럼 설정한다.

https://dav.box.com/dav    /home/davtest/box   davfs   rw,noexec,auto,user,async,_netdev,uid=davtest,gid=davtest   0   0

패키지 재설정

사용자 계정에서 mount 하기 위해 davfs2 를 재설정한다.

$ sudo dpkg-reconfigure davfs2

Should unprivileged users be allowed to mount WebDAV resource? 질문에 Yes를 선택한다.

테스트

mount

$ mount /home/davtest/box

unmount

$ sudo umount /home/davtest/box

2014년 10월 21일

OSX - 다크 모드 토글

tell application "System Preferences"
    set current pane to pane "com.apple.preference.general"
    activate
end tell

tell application "System Events" to tell process "System Preferences"
    delay 2
    tell window "일반"
        click checkbox 3
    end tell
end tell

tell application "System Preferences"
    quit
end tell

2014년 6월 19일

PogoPlug/Debian 설치

PogoPlug Series 4에 Debian을 설치하고 설정하는 방법을 기술한다.

Debian 설치

다음 링크의 내용을 참고해서 설치한다.

http://www.ppomppu.co.kr/zboard/view.php?id=nas&page=1&divpage=2&search_type=name&keyword=Srki&no=4524

기본 설정

  1. ssh 접속한다. root의 기본 비밀번호는 root이다.
  2. 보안을 위해서 root 비번 변경한다.

    # passwd
  3. vi 설치

    # apt-get install vim-nox less file
  4. vi를 기본 에디터로 설정
    # update-alternatives --config editor

IP 설정

고정 IP로 사용할 경우 아래 2가지 방법이 있다.

  • 기본 DHCP로 두고 pogo의 공유기에서 고정
  • 시스템 설정 변경

아래는 시스템 설정을 변경하는 방법을 설명한다. /etc/network/interfaces 파일에서

iface eth0 inet dhcp

내용을 아래 처럼 바꾼다(IP등 상세 내용은 환경에 맞는 값을 쓰면 된다).

iface eth0 inet static
address 192.168.0.20
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1

swap 설정

sysctl 명령으로 swap을 거의 쓰지 않도록 설정한다.

# sysctl vm.swappiness=10

시스템 부팅시에도 자동 적용 하려면 /etc/sysctl.d/swap.conf 파일에 아래 줄을 추가한다.

vm.swappiness=10

시간 설정

time zone 설정

아래 명령을 사용해서 time zone을 원하는 지역으로 설정한다.

# dpkg-reconfigure tzdata

time server 설정

아래 명령을 사용해서 ntpdate 패키지를 설치한다.

# apt-get install ntpdate

/etc/default/ntpdate 파일에서 아래 설정을 no로 변경한다.

NTPDATE_USE_NTP_CONF=no

매일 한번씩 시간 동기화를 하기 위해 아래와 같은 내용의 /etc/cron.daily/ntpdate-debian파일을 생성한다.

#!/bin/sh

if [ -x /usr/sbin/ntpdate-debian ]; then
	/usr/sbin/ntpdate-debian > /dev/null 2>&1
fi

파일 생성 후 실행 권한을 부여한다.

# chmod +x /etc/cron.daily/ntpdate-debian

host이름 변경

/etc/hostname 파일에 원하는 이름을 적고 아래 명령을 실행한다.

# /etc/init.d/hostname.sh start

domain을 사용하지 않는 경우에는 /etc/hosts 에도 추가한다.

사용자 설정

아래 명령으로 사용자를 추가한다.

# adduser foo

sudo 설정

아래 명령으로 sudo를 설치한다.

# apt-get install sudo

아까 추가한 foosudo 그룹에 추가한다.

# adduser foo sudo

이제 ssh 연결을 끊고 추가한 사용자로 재접속한다. 재접속 후 아래 명령으로 root shell을 얻을 수 있는지 확인한다.

$ sudo -s

root 계정 잠금

root shell을 얻을 수 있다면 이제부터 sudo 명령으로 시스템 제어를 할 수 있기 때문에 root 계정을 잠근다.

$ sudo passwd -l root

Locale 설정

아래 명령으로 locales 패키지를 설치하고 locale을 지정한다.

$ sudo apt-get install locales-all locales
$ sudo dpkg-reconfigure locales

보통은 아래 2개를 선택해주면 무난하다.

  • en_US.UTF-8
  • ko_KR.UTF-8

Python 설정

설치

$ sudo apt-get install python

PIP 설치

http://pip.readthedocs.org/en/latest/installing.html

사용하는 package 설치

$ sudo pip install beautifulsoup4
$ sudo pip install feedparser
$ sudo pip install google-api-python-client
$ sudo pip install python-gflags

2014년 5월 14일

Windows8.1/ipTime 공유기에 VPN 접속이 안될 때

Windows 8.1에서 ipTime 공유기에 VPN 접속을 시도할 때 아래와 같은 오류 메시지가 나오면서 접속이 안될 때가 있다.

Error 720: A connection to the remote computer could not be established.
You might need to change the network settings for this connection.

이때는 VPN 연결 설정을 수정해야 한다.

  • Control Panel -> Network and Sharing Center -> Network and Sharing Center -> Change adapter settings 로 들어간다.
  • 원하는 VPN 연결의 Properties 창을 띄운다.
  • Properties 창의 Security 탭에서 Data encryptionRequire encryption (disconnect if server declines) 로 변경한다기본 값은 Optional Encryption (connect even if no encryption)이다.

2014년 5월 10일

Debian/XRDP + X11VNC + GDM3

xrdp를 사용하면 RDP를 이용해서 원격 접속이 가능해진다. 그러나 기본 설정으로 접속할 경우 GLX 가속 기능을 하나도 쓰지 못하기 때문에 gnome 3.x를 사용할 수 없다.

gnome 3.x에서 xrdp을 사용하려면 일반적인 VNC 서버 대신 지정된 XDISPLAY를 표시해주는 x11vnc를 사용하면 된다.

이 문서는 x11vnc를 부팅시 데몬으로 동작시켜 GDM3화면부터 xrdp로 사용하도록 설정하는 내용을 기술했다.

x11vnc 설정

설치

$ sudo apt-get install x11vnc

vnc 접속 비밀번호 설정

$ sudo x11vnc -storepasswd 비밀번호 /etc/x11vncpasswd

스크립트 작성

아래와 같은 스크립트를 만들어서 /etc/init.d/x11vnc으로 저장한다.

아래 스크립트는 gdm3을 사용한다는 가정으로 작성되었다. 다른 login manager를 쓴다면 그에 맞게 스크립트를 수정해야 한다.

#! /bin/sh
### BEGIN INIT INFO
# Provides:          x11vnc server
# Required-Start:    gdm3
# Required-Stop:     gdm3
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: x11vnc
# Description:       Debian init script for the x11vnc
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/x11vnc

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

wait_gdm3() {
    authfile=$(find /var/run/gdm3/auth-for-Debian-gdm-*/database)
    while [ ! -f $authfile ]
    do
       authfile=$(find /var/run/gdm3/auth-for-Debian-gdm-*/database)
    done
}

case "$1" in
  start)
    log_daemon_msg "Starting X11vnc" "x11vnc"
    wait_gdm3
    start-stop-daemon --start --quiet --pidfile /var/run/x11vnc.pid --make-pidfile --background --exec $DAEMON -- -display :0 -env FD_XDM=1 -auth guess -usepw -rfbauth /etc/x11vncpasswd -shared -oa /var/log/x11vnc.log -xkb -repeat -localhost -noxrecord -noxfixes -noxdamage -noncache -loop
    log_end_msg $?
    ;;
  stop)
    log_daemon_msg "Stopping X11vnc" "x11vnc"
    set +e
    start-stop-daemon --stop --quiet --pidfile /var/run/x11vnc.pid --name x11vnc --retry 5
    set -e
    log_end_msg $?
    ;;
  status)
    status_of_proc -p /var/run/x11vnc.pid "$DAEMON" x11vnc && exit 0 || exit $?
    ;;
  restart|force-reload)
    $0 stop
    sleep 1
    $1 stop
    ;;
  *)
    echo -e "Usage: ${SERVICE} {start|stop|status|restart|force-reload}"
    exit 1
    ;;
esac

exit 0

저장 후 permission을 조절한다.

$ sudo chmod +x /etc/init.d/x11vnc

자동 실행 등록

아래 명령을 이용해서 부팅시 자동 실행되도록 등록한다.

$ sudo update-rc.d x11vnc defaults

x11vnc 시작

재부팅 하거나 아래 명령으로 x11vnc 데몬을 시작한다.

$ sudo /etc/init.d/x11vnc restart

xrdp 설정

설치

아래 명령으로 xrdp을 설치한다.

$ sudo apt-get install xrdp

설정 수정

기본으로 사용할 세션을 x11vnc로 지정하기 위해서 /etc/xrdp/xrdp.ini파일을 열어서 아래와 같이 xrdp1xrdp2내용을 바꾼다.

[xrdp1]
name=console
lib=libvnc.so
ip=127.0.0.1
port=5900
username=na
password=ask

[xrdp2]
name=sesman-Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1

데몬 재시작

설정이 끝나면 아래 명령으로 xrdp 데몬을 재시작한다.

$ sudo /etc/init.d/xrdp restart

2014년 5월 7일

XFCE/터미널에서 Tab키로 자동 완성이 되지 않을때

Debian Sid의 XFCE 환경에서 터미널을 실행하고 Tab키를 누르면 자동 완성 기능이 동작하지 않는다.

이때는 ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml 파일을 열어서 아래 내용을 찾는다.

>property name="<Super>Tab" type="string" value="switch_window_key" />

그리고 아래와 같이 수정한다.

<property name="&lt;Super&gt;Tab" type="empty"/>

수정이 끝나면 logout 후 다시 login 하면 된다.

2014년 2월 25일

Debian/최대 절전 모드가 동작하지 않을 때

pm-hibernate를 실행했을 때 아래와 같은 오류 메시지와 함께 최대 절전 모드로 진입하지 못할 때가 있다.

snapshot_ioctl: ioctl '4004330c' is deprecated and will be removed soon, update your suspend-to-disk utilities

이때는 uswsusp 패키지를 다시 설치하면 된다.

$ sudo apt-get --reinstall install uswsusp

2014년 2월 24일

Debian/xrandr로 해상도 변경하기

xrandr 명령을 이용해서 출력 포트 이름과 해상도 목록을 얻는다.

$ xrandr
Screen 0: minimum 8 x 8, current 1280 x 1024, maximum 8192 x 8192
DVI-I-0 disconnected (normal left inverted right x axis y axis)
DVI-I-1 disconnected (normal left inverted right x axis y axis)
TV-0 disconnected (normal left inverted right x axis y axis)
DVI-I-2 connected primary 1280x1024+0+0 (normal left inverted right x axis y axis) 361mm x 288mm
1280x1024      60.0*+   75.0     70.0     60.0
1024x768       75.0     72.0     70.1     60.0
800x600        75.0     72.2     70.0     60.3     56.2
640x480        75.0     72.8     70.0     59.9

포트와 해상도를 확인했으면 아래와 같이 원하는 포트에 지원하는 해상도를 지정해주면 된다.

$ xrandr --output DVI-I-2 --mode 640x480

만일 기본 해상도로 돌아가고 싶으면 --auto 옵션을 사용한다.

$ xrandr --output DVI-I-2 --auto

2014년 2월 21일

Debian/Gnome-Shell에서 창 닫기 버튼을 왼쪽으로 옮기기

Gnome-Shell 3.8에서 창 닫기 버튼을 우분투나 OS/X처럼 왼쪽으로 옮기려면 dconf을 사용하면 된다.

$ dconf write /org/gnome/shell/overrides/button-layout '"close:"'

2014년 2월 13일

Linux/ASDR 끄기

echo 0 > /proc/sys/kernel/randomize_va_space

2014년 2월 4일

Vim/Win32에서 VCSCommand가 'no suitable plugin' 오류를 내면서 동작하지 않을 때

Windows 7 x64에서 64bit로 빌드된 vim을 사용 중인데 VCSCommand로 svn을 사용하려고 하면 'no suitable plugin' 오류가 발생한다.

원인은 외부 명령 실행시 'svn' info . 식으로 실행 명령에 ' 가 붙기 때문인데 vcssvn.vim 파일을 수정한다.

--- a/plugin/vcssvn.vim
+++ b/plugin/vcssvn.vim
@@ -72,6 +72,9 @@ let s:svnFunctions = {}
 " Returns the executable used to invoke git suitable for use in a shell
 " command.
 function! s:Executable()
+       if has ('win32')
+               return VCSCommandGetOption('VCSCommandSVNExec', 'svn')
+       endif
        return shellescape(VCSCommandGetOption('VCSCommandSVNExec', 'svn'))
 endfunction

vcssvn.vim을 수정하면 'no suitable plugin' 오류는 나지 않지만 VCSInfo 등의 명령을 실행할 때 파일 명에 ' 가 붙어서 실패하게 된다.

이 문제는 vcscommand.vim을 수정해야 한다.

--- a/plugin/vcscommand.vim
+++ b/plugin/vcscommand.vim
@@ -1235,7 +1235,11 @@ function! VCSCommandDoCommand(cmd, cmdName, statusText, options)
     if match(a:cmd, '<VCSCOMMANDFILE>') > 0
         let fullCmd = substitute(a:cmd, '<VCSCOMMANDFILE>', fileName, 'g')
     else
-        let fullCmd = a:cmd . ' -- ' . shellescape(fileName)
+        if has ('win32')
+            let fullCmd = a:cmd . ' -- "' . fileName .'"'
+        else
+            let fullCmd = a:cmd . ' -- ' . shellescape(fileName)
+        endif
     endif

     " Change to the directory of the current buffer.  This is done for CVS, but

2014년 1월 6일

Vim/Win32환경에서 한글이 포함된 경로의 파일에 대해 python mode가 동작하지 않는 문제

Win32환경에서 한글이 포함된 경로의 python 파일에 대해 python mode 확장이 제대로 동작하지 않는다.

vundle을 사용할때 기준으로 ~/.vim/bundle/python-mode/pymode/environment.py 파일을 수정해야 한다.

아래는 patch 내용이다.

--- pymode/environment.py_org    2014-01-06 08:44:00.971905800 +0900
+++ pymode/environment.py    2014-01-06 09:21:12.068213500 +0900
@@ -6,6 +6,7 @@
 import json
 import time
 import os.path
+import platform

 from .utils import PY2

@@ -199,11 +200,19 @@

         """

-        if dumps:
-            value = json.dumps(value)
+        if platform.system() != 'Windows':
+            if dumps:
+                value = json.dumps(value)
+
+            if PY2:
+                value = value.decode('utf-8').encode(self.options.get('encoding'))
+        else:
+            # win32 patch
+            if dumps:
+                value = json.dumps(value, ensure_ascii=False, encoding='cp949').encode('cp949')

-        if PY2:
-            value = value.decode('utf-8').encode(self.options.get('encoding'))
+            if PY2:
+                value = value.decode('cp949').encode(self.options.get('encoding'))

         return value
environmemt-win32.path