리눅스 계열 서버에서 작업을 하다보면 작업 이력을 캡처하고 싶어진다. 예전 같으면 별도의 터미널 에뮬레이터를 많이 썼고 거기에는 대개 캡처 로깅이 메뉴로 있었는데 요즘은 주로 그놈 터미널(gnome-terminal)을 쓰다보니 화면 캡처를 어떻게 하나 궁금했다. 그러다 오늘 대략으로 캡처를 해야 할 일이 생겨서 확인해보니 헉... "전체 선택" 해서 복사 & 붙여 넣기를 하면 스크롤 백 버퍼에 있는 전량이 복사가 된다. 물론 스크롤 백 버퍼의 크기는 줄 수로 지정할 수도 있고 무한대로 할 수도 있다. 별도의 캡처 로깅이 메뉴에 없어서 그런 기능이 없는 줄 알았는데... 있어서 다행이다.

저작자 표시
신고
posted by 신묘군

이미 오래전 포스트에서 삼바(samba) 마운트 하는 법은 설명했지만 이번에 Linux Mint Nadia를 새로 깔아서 테스트 하는 과정에서 좀 더 뽀대나게 마운트 하는 방법을 보게 되어 정리해둔다. 이 방법는 남의 사이트에서 배운 것이다.

우선 삼바 파일 시스템을 지원하는데 필요한 패키지를 설치하고 마운트 할 빈 디렉토리를 만든다.

$ sudo apt-get install smbfs
$ sudo mkdir /마운트/할/빈/디렉토리

오래전 포스트에서 명령어로 그냥 마운트 하는 것은 설명했으니 오늘은 fstab 에 넣어서 마운트하는 법을 정리한다. 안전을 위해서 원본을 복사해둔다.

$ sudo cp /etc/fstab /etc/fstab.old

그리고 마운트 할 때 사용할 사용자 이름과 패스워드를 저장해둘 파일을 만든다.

$ sudo vi /root/.smbcredentials

그리고 그 파일에 다음과 같은 방식으로 이름과 패스워드를 넣어준다.

username=사용자 이름
password=패스워드

그리고 이 파일을 남이 보거나 수정할 수 없도록 접근 권한을 설정해준다.

$ sudo chmod 700 /root/.smbcredentials

이제 진짜로 fstab을 수정해서 마운트를 어떻게 할 것인지 지정을 해줘야 한다. 우선 fstab 파일을 열고

$ sudo vi /etc/fstab

이렇게 한 줄을 넣어준다.

//공유/폴더의/경로 [탭] /마운트/할/빈/디렉토리 [탭] cifs [탭] credentials=/root/.smbcredentials,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0

물론 [탭] 이라고 쓴 자리에는 탭 문자를 넣어야 된다. 그리고 진짜로 마운트를 해본다. 
$ sudo mount -a
또는
$ sudo mount /마운트/할/빈/디렉토리

신고
posted by 신묘군

윈도에서 화면에 보이는 내용을 그대로 PDF 파일로 만들 때는 여러 좋은 툴이 있다. 그런데... 무료 툴 중에서 기업에서 쓸 수 있으면서 윈도 7 64 비트를 지원하는 것은 아직은 없는 듯 하다. 그래서 하는 수 없이 포스트스크립트 파일로 프린트하여 (하는 방법은 여기) GhostScript + GhostView 를 이용하여 변환하거나 또는 XPS 파일로 프린트 하여 GhostPDL 툴의 일종인 GhostXPS (명령어는 gxps)로 변환하는 것이다. 아래는 현재 디렉토리의 모든 XPS 파일을 PDF 파일로 변환하는 예시이다.

** for i in *xps; do gxps  -sDEVICE=pdfwrite -dNOPAUSE -sOutputFile=${i%.*}.pdf $i; done


신고
posted by 신묘군
오랜만에 손수 리눅스 서버를 관리하려니 생소하다. 예전에는 서버 방화벽을 설정하기 위해서는 iptables 명령을 직접 썼는데 이제는 뭐 그럴 필요가 없다.

$ sudo system-config-firewall-tui

이렇게 해주면 멋진 텍스트 사용자 인터페이스를 통해서 관리할 수 있다. 그럼에도 불구하고 iptables 명령을 직접 쓰는 것도 여전히 가능하며 (별로 추천하고 싶지 않다 ㅠㅠ) /etc/systconfig/iptables 파일을 수정하는 방법을 쓸 수도 있다.
신고
posted by 신묘군
기술을 얘기한다 2011.01.11 16:58
우분투 리눅스에 포함되어 있는 X 윈도는 워낙 훌륭해서 USB  키브드와 잘 연동된다. 예를 들어, 내가 현재 사용하고 있는 IBM Ultranav 키보드의 경우 키보드에 빨콩이라고 불리는 스틱 형태의 포인터와 터치패드가 동시에 내장되어 있다. 따라서, 이 키보드를 연결하면 이들 모두가 인식되어 빨콩으로든 터치패드로든 모두 마우스 포인터 옮기기와 클릭 등을 할 수 있다.

그런데, 가끔 키보드를 치다가 터치패드를 건드려서 엉뚱한 윈도가 활성화 된다든지 하는 맘에 안드는 경우가 생겨서 나는 항상 터치패드는 disable 시켜놓고 쓴다. 윈도의 경우 Ultranav 용 드라이버를 설치하면 선택적으로  enable/disable 할 수 있지만 우분투에서는 어떻게 할까?

물론 항상 그렇지만 여러가지 방법이 있다. 그리고 그 방법은 현재 사용하고 있는 X 윈도의 버전 등과도 관련이 있다. 어쨌든 최신판의 우분투를 기준으로 하면 다음과 같이 해결된다.

우선, 입력 장치가 뭐가 달려 있는지 본다.

newcat@newcat:~$ xinput list
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ Synaptics Inc. Composite TouchPad / TrackPoint    id=12    [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                       id=14    [slave  pointer  (2)]
⎜   ↳ Macintosh mouse button emulation            id=16    [slave  pointer  (2)]
⎜   ↳ Synaptics Inc. Composite TouchPad / TrackPoint    id=11    [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
    ↳ Power Button                                id=6    [slave  keyboard (3)]
    ↳ Video Bus                                   id=7    [slave  keyboard (3)]
    ↳ Sleep Button                                id=8    [slave  keyboard (3)]
    ↳ Lite-On Tech IBM USB Travel Keyboard with UltraNav    id=9    [slave  keyboard (3)]
    ↳ Lite-On Tech IBM USB Travel Keyboard with UltraNav    id=10    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                id=13    [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                      id=15    [slave  keyboard (3)]
포인터로는 시냅틱 터치패드/트랙포인트가 두개 (id 11번과 12번) 그리고 TPPS/2 IBM 트랙포인트가 하나 보인다. (후자의 경우 현재 사용하는 노트북에 내장된 빨콩인 듯) 키보드로는 울트라나브 키브드가 두개 보이는데 하나는 외장 USB이고 하나는 IBM ThinkPad 노트북에 내장된 키보드인 것으로 추정된다.

그렇다면 내가 disable 하고 싶은 터치패드가 11번인지 12번인지 어떻게 알 수 있을까? 다행히도 해당 장치가 발생시키는 이벤트를 볼 수 있는 기능도 xinput 이 제공한다.
newcat@newcat:~$ xinput test 11
motion a[0]=2316 a[1]=549
motion a[0]=2320 a[1]=545
motion a[0]=2325 a[1]=541
...
이런 식으로 각 장치 id 를 바꿔가면서 해보면 어느 장치가 몇 번인지를 알게 된다. 나의 경우는 11번을 disable 해야 한다는 걸 알게되었고 이제는 disable 시키려고 한다. 그럼 각 장치가 제공하는 기능이 무엇이 있는지 검사한다.
newcat@newcat:~$ xinput list-props 11
Device 'Synaptics Inc. Composite TouchPad / TrackPoint':
    Device Enabled (135):    1
    Device Accel Profile (265):    0
    Device Accel Constant Deceleration (266):    1.000000
    Device Accel Adaptive Deceleration (268):    1.000000
    Device Accel Velocity Scaling (269):    10.000000
    Evdev Reopen Attempts (250):    10
    Evdev Axis Inversion (270):    0, 0
    Evdev Axes Swap (272):    0
    Axis Labels (273):    "Rel X" (143), "Rel Y" (144)
    Button Labels (274):    "Button Left" (136), "Button Middle" (137), "Button Right" (138), "Button Wheel Up" (139), "Button Wheel Down" (140)
    Evdev Middle Button Emulation (257):    2
    Evdev Middle Button Timeout (258):    50
    Evdev Wheel Emulation (259):    0
    Evdev Wheel Emulation Axes (260):    0, 0, 4, 5
    Evdev Wheel Emulation Inertia (261):    10
    Evdev Wheel Emulation Timeout (262):    200
    Evdev Wheel Emulation Button (263):    4
    Evdev Drag Lock Buttons (264):    0
옳지. 첫 줄에 있는 "Device Enabled" 가 눈에 번쩍! 이걸 1 -> 0 으로 바꿔주면 되겠다.
newcat@newcat:~$ xinput set-int-prop 11 "Device Enabled" 8 0
0 앞에 있는 8은 8 비트짜리 데이터라는 뜻.






신고
posted by 신묘군
1. 블루투스

블루투스를 다루려면 bluez 를 이용하면 된다. Bluez를 이용하는 법에 대한 기본 정보는 An Introduction to Bluetooth Programming 참조. 샘플 프로그램은 여기에 있다.

리눅스 커맨드 라인에서 어떤 식으로 블루투스를 다룰 수 있는지에 대하여는 Manually Using Bluetooth 참조.

2. UPnP

UPnP를 다루기 위한 기본 라이브러리는 libupnp 이다. guPnP는 UPnP를 객체지향 스타일로 다룰 수 있게 해주는 프레임워크이다.

UPnP를 다룰 수 있는 기본 도구로서 우분투 리눅스에 설치할 수 있는 것으로는 upnp-tools 라는 패키지가 있으나 AV Control Point 는 무슨 이유에서인지 최근 버전에서 빠져있고 소스를 받아서 build를 해도 필요한 헤더 파일이 없어서 빌드가 되지 않음. (우분투의 버그 리포팅 사이트에 버그로 등재되어 있으니 해결 시한은 알려진 바 없음.)

UPnP를 지원하는 프레임워크로서 Coherence가 있다. 예를 들어, 음악 재생 프로그램인 Rhythmbox의 경우 Coherence Plug-in을 설치하고 enable 시켜주면 원격지의 UPnP 미디어 서버의 음악을 찾아 재생할 수 있다.

UPnP를 지원하는 여러 소프트웨어 패키지, 프로젝트에 대한 소개는 별도의 사이트에 있는데 이 사이트의 샘플 소스인 play-next-pause는 상당히 코드가 짧아서 이해하기 좋다. UPnP-inspector 라는 코드가 제일 좋은 소스인 듯.

추가된 이야기 : 안드로이드 환경에서는 CyberLinkForJava를 사용할 수 있다. 그 외 AndroMoteTwonkyServer mobile 가 있으나 소스가 공개되어있는지는 확인하지 못하였다.

3. Audio control

리눅스에서 오디오를 다루는 제일 좋은 라이브러리는 GStreamer 이며 Python binding이 있어서 간단히 다룰 수 있다. GStreamer는 souce / sink 라는 개념이 잘 정리되어 있다. 다음의 예는 mp3 파일을 재생하는 것을 필요한 source / sink 를 연결해서 하는 방법을 보여준다.

gst-launch-0.10 filesrc location=파일이름.mp3 ! mad ! audioconvert ! alsasink

리눅스에서 오디오 입/출력을 다루는 가장 잘 정리된 도구는 PulseAudio이며 특히 PulseAudio Volume Control 과 PulseAudio Device Chooser는 필수 도구.
신고
posted by 신묘군
기술을 얘기한다 2009.03.03 17:07
틀림없이 2.6.27-10 버전의 커널을 쓸 때까지만 해도 문제가 없었다. 그런데 11 버전 이후 오늘 현재 버전 (13) 에 이르기까지 갑자기 Fn+Home / Fn+End 키를 이용하여 화면 밝기를 조절하는 기능이 안되고 있다. 이 문제를 우분투 포럼에 제기 했더니 나만 그런게 아닌 모양이다. --> 우분투 포럼에 문제를 제기한 글

그동안 답을 찾지 못하고 있었는데 오늘 드디어 해결책을 찾았다. (해결책을 언급한 링크) 뭐 해결책이라고 해봐야 간단하다. /etc/modprobe.d/options 파일에 다음 한 줄을 추가하면 된다.
options thinkpad_acpi brightness_enable=1
오늘 현재 버전의 커널 (2.6.27-13-generic) + Thinkpad X61 조합에서는 잘 된다. 다른 버전의 커널에서는 테스트 하지 않았다. 만약 이걸로 해결되지 않는다면 -10 버전의 커널로 생활하는 수 밖에 없다. 예전 버전의 커널로 부팅하고자 한다면 /boot/grub/menu.lst 파일에 가서 default 값을 원하는 버전의 커널 이미지로 지정해주면 된다.
신고
posted by 신묘군
기술을 얘기한다 2009.02.18 11:52
/* 개인적으로는 배터리는 소모품이니 그냥 완전 방전에만 주의하고 쓰면 된다라는 설을 신봉하고 있었다. 그런데 여러가지 경제 사정이 어려워지니 별 걸 다 신경 쓰게 된다. */

ThinkPad 에는 배터리를 정교하게 관리하는 기술이 내장되어 있다. 이 기능을 윈도에서 이용하고자 할 때에는 Power Manager 라는 프로그램을 이용하면 된다. 예를 들어, ThinkPad 에서 사용하는 Li-Ion 배터리의 경우에는 너무 많이 충전 방전을 반복하면 수명이 단축된다. 따라서, 충분히 배터리가 떨어졌을 때만 충전을 시작하고 그리고 충전도 100% 가 아닌 약간 미달되게 충전하는 것이 더 좋다고 한다. (항간에는 이를 놓고 실로 다양한 설이 난무하고 있으므로 나도 어느 것이 정설인지는 모르겠다. 일단은 thinkwiki 에 있는 배터리 관리 관련 글을 믿어보기로 하자.)

그런데 리눅스에는 해당 프로그램이 없어서 안되는 줄 알고 있었는데 우연히 smapi 라는 것을 이용하여 할 수 있다는 것을 알게 되고 이를 설치해보았다. smapi 에 관한 상세한 설명은 thinkwiki의 smapi 관련 기사 를 참조하면 되고 우분투 리눅스에서 설치하는 방법은 ubuntu forum 의 관련 글을 참조하면 되겠다.

글에 다 나와 있지만 그래도 기록을 위하여 절차를 설명하면 다음과 같다.

synaptic 이나 aptitude 등을 이용해서 필요한 패키지(tp_smapi_src, build-essential, linux-source-현재버전)를 설치한다. ubuntu forum 의 글에서는 source forge 에서 thinkpad smapi 소스를 받으라고 되어 있지만 Intrepid 에서는 해당 패키지가 들어 있는 듯 하다. 그냥 synaptic 에서 설치하였다.

smapi 소스 패키지는 /usr/src 디렉토리 아래에 설치되는데 그곳으로 가서 소스를 풀어준다.
$ cd /usr/src
$ sudo tar jxvf tp-smapi.tar.bz2
풀린 소스에서 커널 모듈을 빌드 한다.
$ cd tp-smapi/
$ sudo make install HDAPS=1 KSRC=/usr/src/linux-headers-현재리눅스버전
다음 번 부팅 부터는 자동으로 해당 모듈이 로드 되도록 /etc/modules 파일에 tp_smapi 라는 줄을 추가한다.
$ sudo -s;
$ echo "tp_smapi" >> /etc/modules
리부팅을 하느니 이번에는 그냥 해당 모듈을 로드해보자.
$ sudo modprobe tp_smapi
그리고 충전을 시작할 시점 (즉, 이 수준 이하로 배터리가 떨어지면 충전이 시작된다) 과 충전을 중단할 시점을 지정한다.
$ sudo -s;
echo "30" > /sys/devices/platform/smapi/BAT0/start_charge_thresh;
echo "85" > /sys/devices/platform/smapi/BAT0/stop_charge_thresh;
척 봐서 알겠지만 /sys/devices/platform/smapi 아래에 배터리에 관련된 정보가 들어 있기도 하고 필요한 컨트롤을 할 수 있는 파일이 들어 있기도 하다. 그럼 현재 배터리 정보를 보려면 어떻게 하나? 파일 하나 하나를 뒤질 수는 없으니 이걸 정리해주는 스크립트가 있다. --> 이 링크 <-- 를 클릭해서 쉘 스크립트를 받은뒤 실행해보면 배터리 상태를 보여준다.
$ ~/bin/thinkpad-smapi.bash -b 0
BATTERY 0 INFORMATION
=====================

Battery slot:
  Battery present: yes
  Battery state: idle

Embedded info:
  FRU P/N: 42T4505
  Barcoding: 1ZDA078729D
  Serial number: 2929
  OEM Manufacturer: SANYO
  Chemistry: LION
  Manufacture date: 2007-08-07
  Design capacity & voltage: 37440 mWh, 14400 mV

Battery health:
  First use date: 2007-09-05
  Cycle count: 148
  Last full capacity: 28770 mWh
  Average current / power (past 1 minute): 0 mA, 0 mW

Battery status:
  Remaining capacity: 28430 mWh (99 %)
  Remaining running time: [not discharging]
  Running current & power: 0 mA, 0 mW
  Temperature: 34700 mC
  Voltage: 16256 mV
  Remaining charging time: [not charging]

Battery charging control:
  Start charging at: 30 %
  Stop charging at: 85 %
  Prevent charging for: 0 min
  Force battery discharge: no
눈여겨볼 수치에 색칠을 했다.

우선 148. 대략 충전 싸이클 500 여회가 되면 배터리는 망가진다는 설이 있다. 그렇게 본다면 벌써 수명을 1/3 은 쓴 셈이다. 으 아까워라. 진작에 신경 써 줄껄...

그 다음에 볼 수치는 28430 / 37440. 원래는 3만7천 정도가 충전되던 배터리 였는데 이제는 완전히 충전해도 2만 8천 밖에 안 들어간다는거다. 어째 요즘 버티는 시간이 좀 줄었다 싶더라...

그리고 30 / 85. 그래 이제는 설정을 해줬으니 충전 싸이클도 쉽게 안 늘어나고 현 상태로라도 오래 버텨주겠지.

그런데 30 / 85 설정 값은 리부팅하면 없어진다. 이를 계속 유지시키려면 다음과 같은 추가 작업을 해줘야 된다.

$ sudo aptitude install sysfsutils
$ sudo -s;
echo "devices/platform/smapi/BAT0/start_charge_thresh=30" >> /etc/sysfs.conf
echo "devices/platform/smapi/BAT0/stop_charge_thresh=85" >> /etc/sysfs.conf


신고
posted by 신묘군
단순히 Ethernet card를 여러 개 있는 것 처럼 하는 거나 loopback 장치를 여러 개 만드는 것은 "ifconfig" 명령 만으로 간단히 할 수 있지만 내가 원하는 것은 진짜로 여러 개의 인터페이스가 있는 것 처럼 동작하게 하는 것이다. 시나리오는 이렇다. 특정한 고정 포트에서 수신을 기다리는 데몬 프로세스가 있는데 이런 데몬 프로세스가 컴퓨터마나 한 개씩 떠 있고 이들 간의 통신을 통해서 뭔가 일을 처리하는 프로그램을 만들었다고 하자. 그것을 여러 대의 컴퓨터가 아니라 한대의 컴퓨터에서 실험을 하고 싶은데 한 컴퓨터에서 띄우면 두번 째 데몬부터는 해당 포트를 잡을 수가 없다. (이미 처음의 데몬이 그 포트를 잡고 있으니까.)

네트워크 카드가 여러 개 있다면 각 네트워크 카드를 지정해서 데몬을 띄우게 함으로써(자바의 경우 NetworkInterface.getByName 메쏘드로 이것을 구현할 수 있다.) 해결이 되지만 컴퓨터에 네트워크 카드도 하나 뿐이다. 그럼 어떻게 해야 하나?

자세히 알지도 못하고 자세히 쓸 힘도 안 남아 있으므로 간단히 요약한다. 리눅스에서는 가짜 인터페이스를 만드는 기능이 있는데 이를 tap 이라 한다. tap을 하나 만들고 또 브리지를 만들고 이 브리지에 tap과 진짜 네트워크 카드를 연결한 뒤 한 데몬은 tap 인터페이스에서 다른 데몬은 진짜 네트워크 카드 위에서 실행하면 된다. 설정하는 과정은 다음과 같다. (tap은 여러 개 만들 수 있으므로 여러 개의 데몬으로도 가능할 것 같다. 안해봤음.)
$ sudo tunctl -u newcat -t tap0
Set 'tap0' persistent and owned by uid 1000
$ sudo ifconfig eth0 <주소> up promisc
$ sudo ifconfig tap0 <주소> up promisc
$ sudo brctl addbr br0
$ sudo brctl addif br0 eth0
$ sudo brctl addif br0 tap0
eth0 (진짜 네트워크 카드)의 주소를 DHCP로 받아온다면 ifconfig에서 주소를 주지말고 대신
$ sudo dhclient eth0
라고 해주면 된다. 이 상태에서 만약 데몬이 자신이 동작할 네트워크 인터페이스 이름을 인자로 가지고 실행된다고 하면 다음고 같이 실행하면 된다.
$ daemon eth0
$ daemon tap0
(주의: 무슨 이유에서인지 이렇게 해 놓으면 외부 네트워크와는 연결이 안되는 증세가 나타났다. 뭘 잘못 한건지... 실험이 끝나면 다음과 같이 브리지에서 인터페이스를 떼내어 주면 되살아 난다.)
$ sudo brctl delif br0 eth0
신고
posted by 신묘군
Ubutun 에서 바이너리로 공급되는 ffmpeg 은 x264 지원에 문제가 있어서 PSP용 동영상을 만들어낼 수 없다. 따라서, 새로 빌드를 해야 되는데 그 과정은 다음과 같다.

You have to download the latest revision from svn:

svn co svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

Once that downloads, follow the same steps above (even the hardy patch still works). Before you run the configure statement, you must install the latest x264 version first (this revision asks for a version of x264 >= 0.65, while Ubuntu only offers at most version 0.59). To do this, grab the latest version from http://www.videolan.org. You can install either via tarball or git repository (I used git).

Then, once you’ve completed installation of x264 and finally get to the “configure” portion, use this configure statement:

./configure—enable-gpl—enable-postproc—enable-libvorbis—enable-libdc1394—enable-libgsm—disable-debug—enable-libmp3lame—enable-libfaad—enable-libfaac—enable-libxvid—enable-pthreads—enable-libx264

Before you type “make” there are a few other things that it looks for. I had to install both libpostproc-dev and libavdevice-dev, and also do the following:

sudo ln -s /usr/include/postproc/ /usr/local/include/libpostproc
sudo ln -s /usr/include/ffmpeg/ /usr/local/include/libavdevice
sudo ln -s /usr/include/ffmpeg/ /usr/local/include/libavformat
sudo ln -s /usr/include/ffmpeg /usr/local/include/libavcodec
sudo ln -s /usr/include/ffmpeg /usr/local/include/libavutil
sudo ln -s /usr/lib/vhook /usr/local/lib/vhook
출처의 글에서는 Hardy에서 설치하는 법을 다루었고 그 아래로 내려가면 Intrepid에서 설치하는 법은 누군가 덧글로 올려두었다. 하라는대로 하면 되고... (주의: 뭘 내가 잘못했는지는 모르겠지만 이미 libx264-dev 패키지가 설치된 경우에는 ffmpeg 의 configure 에서 그 놈을 참조해서 문제가 되는듯. 디렉토리를 잘 정해주면 될 것 같은데 나는 그냥 해당 패키지를 삭제하고 내가 빌드한 libx264를 설치한 뒤 ffmepg을 빌드했다.)

그리고 비디오 파일을 PSP 용으로 변환하려면 다음과 같은 명령을 쓰면 된다.

<경로>/ffmpeg -i <입력 비디오 파일 이름> -acodec libfaac -ab 128kb -ac 2 -ar 48000 -vcodec libx264 -level 21 -b 640kb -coder 1 -f psp -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -g 250 -s 480x272 <만들어질 비디오 파일 이름>


신고
posted by 신묘군
기술을 얘기한다 2008.11.12 14:14
집에서 작업할 파일을 학교에서 USB 메모리로 옮기는데 파일이 커서 그런지 뭔가 이상한 문제가 생겼다. 그래서 unmount 했다가 다시 껴서 해도 잘 카피가 안되고 우회적인 방법으로 했는데 이번에는 파일을 접근하면 read only 라고 하면서 이상한 에러를 내고 어쨌든 그 파일을 건드리기만 하면 이상한 증세를 낸다. 큰 파일을 복사하는데 문제가 있나해서 구글링을 한참 했는데 결론은... 파일 시스템이 부분적으로 망가진 것이다. 복구하는 방법은 간단하다.
$ sudo dosfsck -av /dev/sdb1
이렇게 했더니 해당 파일의 크기와 할당된 클러스터가 맞지 않아서 고쳐준다구 뭐라고 뭐라고 나온다. 다시 카피를 해보니 잘 되기만 한다.

구글링을 통해 얻은 정보를 종합해보면 처음에 파일을 카피하는 과정에서 내가 USB 메모리를 unmount 하거나 카피를 이상하게 중단했거나 어쨌든 문제가 생겨서 USB 메모리의 파일 시스템에 문제가 생겼고 이 상태에서 그 파일을 접근하려고 하면 Ubuntu는 시스템을 보호하기 위해서 read only로 다시 마운트를 해버린다.

알고 보면 간단한 것을...

신고
posted by 신묘군
가끔 PDF 포맷으로 된 서식에 칸을 메꿔서 제출을 해야 되는데 워낙 악필이라 그냥 편집하는 방법이 없을까 찾아보았습니다.

pdfedit 이라는 프로그램을 추천하는 사람들이 많고 뭔가 그럴싸 해 보이는 UI를 갖고 있으나 막상 내가 편집하려고 하는 파일은 이걸로 편집이 안되었다. (어떤 파일은 read only로 읽히는데 그것과 관련이 있는 듯) 더 써봐야 감이 올 듯.

flpsed 라는 프로그램은 오직 텍스트를 추가하는 기능만 있어서 오히려 직관적이다. 이미 입력된 텍스트를 다시 선택해서 편집하는 방법이 상당히 불편하다는 것이 단점. 그러므로 처음부터 위치를 잘 잡아서 한번에 입력해야 맘이 편할 듯. 편집된 결과는 Postscript 파일로 저장되므로 ps2pdf로 다시 PDF로 바꿔야 하는 모양.

pdftk 라는 프로그램은 PDF 파일을 가지고 여러가지 장난을 칠 수 있게 해주는데 당장은 쓸 일이 없네.
신고
posted by 신묘군
우분투 8.10 환경에서 USB로 외장 하드 디스크를 연결한 경우 외장 하드 디스크의 파일 시스템이 ntfs 나 fat 인 경우에는  자동으로 마운트를 해주면서 막상 리눅스 파일 시스템인 경우에는 자동으로 마운트 하지 않는다. 물론 적당한 옵션을 주면 자동으로 마운트 하겠지만 수동으로 마운트 하려면 이렇게 하면 된다. 우선 어디 디바이스로 잡혔는지 본다.
$ tail /var/log/kern.log
Nov  6 17:00:45 ubuntu kernel: [55546.077715] sd 8:0:0:0: [sdb] Write Protect is off
Nov  6 17:00:45 ubuntu kernel: [55546.077722] sd 8:0:0:0: [sdb] Mode Sense: 03 00 00 00
Nov  6 17:00:45 ubuntu kernel: [55546.077727] sd 8:0:0:0: [sdb] Assuming drive cache: write through
Nov  6 17:00:45 ubuntu kernel: [55546.077736]  sdb: sdb1 sdb2 < sdb5 >
Nov  6 17:00:45 ubuntu kernel: [55546.108081] sd 8:0:0:0: [sdb] Attached SCSI disk
Nov  6 17:00:45 ubuntu kernel: [55546.108296] sd 8:0:0:0: Attached scsi generic sg1 type 0
이 로그 메시지에 의하면 /dev/sdb 로 붙어있다는 것을 알 수 있고 파티션은 세 개다. 무슨 파티션이 있는지 보려면 다음과 같이 한다.
$ sudo fdisk -l /dev/sdb

Disk /dev/sdb: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000440d0

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1       19119   153573336   83  Linux
/dev/sdb2           19120       19457     2714985    5  Extended
/dev/sdb5           19120       19457     2714953+  82  Linux swap / Solaris
얼른 봐서 내가 원하는 파티션은 /dev/sdb1 인 것 같다. 그리고 파티션 타입은 Linux 다. 아마 ext2 이거나 ext3 인 모양이다. 그래서 ext2로 마운트를 해보았다.
$ sudo mount -t ext2 /dev/sdb1 /media/ttt
마운트도 되고 접근도 된다. 그런데 로그 메시지를 보니...
$ tail /var/log/kern.log
...
Nov  6 17:04:56 yangwooko-ubuntu kernel: [55797.380680] EXT2-fs warning (device sdb1): ext2_fill_super: mounting ext3 filesystem as ext2
허걱. ext3 랜다. 그래서 다시 ext3로 다시 마운트 한다.
$ sudo umount /media/ttt
$ sudo mount -t ext3 /dev/sdb1 /media/ttt
그랬더니 이번에는 제대로 된 모양이다.
$ tail /var/log/kern.log
...
Nov  6 17:06:15 yangwooko-ubuntu kernel: [55876.417125] kjournald starting.  Commit interval 5 seconds
Nov  6 17:06:15 yangwooko-ubuntu kernel: [55876.418018] EXT3 FS on sdb1, internal journal
Nov  6 17:06:15 yangwooko-ubuntu kernel: [55876.418029] EXT3-fs: mounted filesystem with ordered data mode.


신고
posted by 신묘군
이때까지, 그냥 /etc/group 파일을 직접 수정하는 방식으로 했는데 알고보니 이렇게 하는 방법이 있더라.
sudo gpasswd -a `whoami` 대상그룹
또는
sudo usermod -G대상그룹 -a `whoami`
또는
sudo adduser $USER 대상그룹
신고
posted by 신묘군
기술을 얘기한다 2008.11.01 18:51
마이크로 소프트의 윈도 모바일에 돌아가는 응용을 만들어보고 싶은데 그렇다고 비쥬얼 스튜디오 깔기는 싫고 (더 정확히는 쓰는 법도 모르고 얼른 보기에 너무 무겁고...) 그래서 리눅스에서 할 수는 없을까 뒤지던 중 GCC를 윈도 모바일 (또는 이전의 WinCE)용 코드를 생성하는 크로스 컴파일러로 만든 CeGCC 라는 것을 발견했다.

아싸...

필요한 파일을 다운로드 받아서 실행을 했는데... 허걱... libgmp 어쩌구가 안된다고 에러가 난다. 정확한 이유는 파악되지 않았지만 내 환경은 (AMD) 64비트 환경인데 다운 받은 패키지는 32비트 용으로 만들어져 있어서 그런 모양이다. (확실치는 않음) 어쨌든 안되는 건 안되는 것. 이럴 바에는 그냥 소스를 받아서 빌드하자.

이번에는 tar로 묶인 소스를 받아서 빌드를 해봤다. 으... 몇몇 셀 스크립트는 x 모드가 빠져있어서 chmod로 넣어주고 몇 소스는 말썽을 부리고... 이것도 쉽지 않네. 안되겠다. 최신 소스를 받아보자. 최신 소스를 받아서 빌드하는 방법을 설명해둔 글을 참조하여 svn을 이용해서 최신 소스를 내려받고 빌드를 했다. 여전히 셀 스크립트의 모드 문제와 몇몇 소스에서 fread/fwrite 의 return value 처리를 해주지 않는 문제가 있어서 빌드가 중단되었지만 적당히 수정해서 넘어가게 했다.

그리고 드디어 빌드는 성공. PATH 변수를 빌드된 바이너리에 맞춰 설정해주고 test 디렉토리 아래에 있는 몇 개의 샘플 프로젝트를 make 해보니 프로그램은 생성이 된다. 그런데 돌아가는지 어떻게 알지?

아... 윈도 모바일이 돌아가는 PDA나 핸드폰이 없으면 테스트가 불가능? 그럴리가 없다. 여기 저기 뒤적 뒤적. 음... 친절하게도 마이크로소프트에서는 장치 에뮬레이터(Microsoft Device Emulator Standalone version 3)와 그 에뮬레이터에서 돌아가는 윈도 모바일 이미지(Window Mobile 6 Localized Images <-- 여기에 가면 standard version이랑 professional version이랑 둑개 있는데 서로 약간 다른 세트의 이미지를 갖고 있는 듯. 그냥 둘다 설치했음)를 제공한다.

문제는... 얘네들은 윈도용 프로그램이라는 것. 즉, 리눅스에서는 돌릴 수가 없다는 것.

이 아니고... 이럴 때 쓰라고 있는게 wine 이다. wine은 윈도의 API를 실행할 수 있는 환경을 리눅스+X 환경에서 구현한 것이다. 그러니까 정상적인 윈도 API만 사용하는 윈도 응용은 wine 위에서 그대로 돌아간다. 그런데 그냥 맨 입에 되는 것은 아니고 너저분한 작업을 필요로 하는 경우가 많다. 남들이 이미 헛짓을 해가며 알아낸 노하우를 재활용하려고 구글신에게 물어보니 역시나... 관련 개발 메일링 리스트에 방법이 올라와 있다.

그런데 그대로 하니까 안되고 (아마 예전 버전 기준이라 그런 듯...) 이렇게 약간 뒤틀어서 하니까 되더라. 우선 처음으로 wine을 설치한 것이라면 wine 관련 파일이 아직 생성되지 않았을테니 이를 생성해준다.
$ winecfg
그냥 아무것도 안하고 닫아주면 된다. 필요한 파일은 ~/.wine 디렉토리에 만들어진다. 그냥 디바이스 에뮬레이터를 설치하면 이상한 에러가 나면서 설치가 안되는데 이렇게 해주면 된다. (이유는 묻지 말 것. 나도 모름)
$ cd 홈디렉토리로
$ cd .wine
$ ln -sf drive_c harddiskvolume1
$ cd dosdevices
$ rm c:
$ ln -s ../harddiskvolume1 c:
이제는 디바이스 에뮬레이터와 관련 이미지를 설치한다.
$ wine /다운받은_디렉토리/vs_emulator.exe
$ wine msiexec /i /다운받은_디렉토리/"Windows Mobile 6 Professional Images (USA).msi"
$ wine msiexec /i /다운받은_디렉토리/"Windows Mobile 6 Standard Images (USA).msi"
이제는 디바이스 에뮬레이터에 윈도 모바일 이미지를 넣어서 띄워본다.
$ wine ~/.wine/drive_c/Program Files/Microsoft Device Emulator/1.0/DeviceEmulator.exe c:/Program Files/Windows Mobile 6 SDK/PocketPC/Deviceemulation/0409/PPC_USA.BIN /sharedfolder . /memsize 256 /h /video 480x640x16
그럼 한참(정말로 한참 기다려야 된다...)있으면 PDA 비스름한 화면을 보게 될 것이다. 그러면 아까 CeGCC 의 test 디렉트로에서 빌드한 샘플 응용은 어떻게 돌려보나? 여기에 공유 폴더가 쓰이게 된다. 현재 디렉토리를 공유 폴더로 잡고 에뮬레이터를 띄웠으니까 (명령 라인 잘 볼 것!) 현재 디렉토리에 해당 응용의 바이너리를 옮겨 놓고 에뮬레이터 안의 윈도 모바일에서 파일 익스플로러를 띄우고 Storage Card 를 선택하면 공유 폴더가 보이고 거기서 해당 응용을 클릭해주면... 빠밤... 뜬다.

이제... 디버깅을 어떻게 할 수 있는지를 알아봐야 겠다.

신고
posted by 신묘군
기술을 얘기한다 2008.10.07 11:28

화면 인증 샷!

레노보 씽크패드(Thinkpad) X61 모델을 데스크 탑 겸용 노트북으로 쓰고 있는데 기본으로 깔려나온 윈도 비스타는 느려터지고 생각지 않은 결정적인 장면에서 자꾸만 멈춰서 성질나서 못쓰겠고 윈도 XP로 갈아탔으나 최근 들어 이틀에 한번 꼴로 블루스크린이 떠는 통에 그냥 리눅스로 갈아타기로 했다. 그래서 쓰기 편하다는 우분투를 다운로드 받아서 깔았다. 한글 환경으로 설정하니 한글 입출력에도 문제가 없고 글꼴도 많이 보강되어 꽤나 볼만하다.

물론 그렇다고 윈도처럼 마냥 다 되는 것은 아니다. 몇 가지 문제점이 있고 이들 문제점은 어떤 사람에게는 사소하고 어떤 사람들에게는 결정적일 수 있다. 그동안 겪은 문제점을 열거해보면 다음과 같다.

(0) 듀얼 스크린이 안된다구

내 노트북에는 내장된 LCD 화면 외에도 외부로 화면 출력을 할 수 있는 VGA 단자가 있다. 윈도를 쓸 때에는 외부 출력을 LCD 모니터에 연결해서 1280x1024 모드로 쓰고 내부 LCD 는 1024x768 모드로 해서 각기 다른 화면이 나오게 해놓고 넓찍하게 썼더랬다. 그런데 리눅스로 갈아타고 나니 이게 안되는거다. RandR을 이용해서 잘 설정해 주면 된다는 글도 있고 X11 설정 파일을 잘 고치면 된다는 글도 있으나 로그인 화면까지만 듀얼이 되고 일단 로그인 하고나면 그냥 1280x1024 모드에 양쪽이 같은 화면이 나오도록 밖에 안되는거다. 여기저기 더 둘러보면 답이 있을 듯도 하지만 당분간은 바빠서 패스...

(1) 시프트 키가 말을 안들어요

듀얼 스크린이 되게 하려고 여기 저기 손을 대다보니 어느 순간 시프트 키가 먹지 않는다. 텍스트 콘솔 화면에서는 먹는 것을 보면 X 윈도쪽에서 뭔가 문제가 있는 모양이다. 여기 저기 뒤져보니 RandR 이 문제를 일으킨다는 주장, 다국어 입력기가 문제를 일으킨다는 주장, 화면 테마가 문제라는 주장 등이 있었다. 어쨌든 나는 "시스템 --> 기본설정 --> 모양새 --> 화면 효과 --> 없음"으로 설정하고 해결했다. 화면 효과가 멋있느데 써먹지 못하는 것이 아쉽기는 하나 기능상 문제가 있는게 아니고 오히려 화면이 빨리 빨리 전환되는 것을 위로로 삼아야 겠다.

(2) 불여우 폰트 설정하다가 엉망이 되었어요

웹 서핑을 하다보면 자꾸 욕심이 생긴다. 게다가 리눅스용으로 쓸 수 있는 공개 글꼴이 많아서 이것 저것 가져다가 깔아서 설정해보고 했다. 그러다 언제 어디를 잘못 건드렸는지 화면이 무지하게 허름하게 바뀌어 버렸다. 도무지 복구할 방법을 못 찾던 중... 홈 디렉토리의 ".mozilla" 디렉토리를 싹 지웠더니 처음 세팅으로 돌아왔다. 위의 스크린 샷은 그 상태에서 뽑은 것이다. 잘 모르면 손대지 마라...

(3) 천둥새 목록 화면 글씨에 맘에 안들어요

메일 클라이언트인 천둥새에서는 메시지를 표시할 때 어떤 글꼴을 사용할 것인지 선택하는 기능은 있지만 편지의 목록이나 폴더 이름 등을 표시할 때는 어떤 글꼴을 쓸 것인지 설정하는 메뉴가 없다. 이를 해결하기 위해서는 홈 디렉토리 밑에 "~/.mozilla-thunderbird/어쩌구저쩌구.default/chrome/userChrome.css" 파일을 인터넷에서 구해서 갖다 깔고 적당히 폰트 설정을 해줘서 해결했다.

(4) 티스토리에서 그림을 올릴 수 없어요

이건 참 곤란한 이슈다. 여러 가지 문제 해결책이 제시되었는데 그 중 하나가 우분투에서 깔리는 플래시 플레이어와 티스토리의 그림 업로드하는 기능(이것이 플래시로 구현되어 있음)과 충돌을 일으키는 것으로 보인다. 플래시 플레이어를 최신판으로 업그레이드 해서 해결해야 된다는 주장이 있으나 이는 우분투의 기본 배포 패키지가 아닌 back-ports 해 포함되어 있어서 찜찜해서 포기했다. 대신 이것 저것 시도하다 보니 티스토리의 "이전 관리"에 포함된 이전의 편집기에서 그림 올리기가 아니라 파일 올리기 기능으로 업로드를 하면 된다는 것을 찾아 내었다. (아 놀라운 뺑뺑이의 위력이여~~) 플래시 플레이어 최신판이 정식으로 릴리즈 될 때 까지는 가급적 그림을 올리는 것은 자제해야겠다. ^^

그 외에도 의외로 잘 되는 기능도 있었다. 예를 들어 보자면,

(5) 오픈오피스 워드 프로세서와 MS 워드는 호환성은 의의로 높다

예를 들어, 공동으로 문서를 편집할 때 결정적으로 쓰이는 기능인 변경 추적 기능이 오픈오피스와 MS 워드가 호환이 된다. 따라서, 워드에서 만든 문서를 오픈오피스에서 수정하면 그 내역이 기록되고 다시 워드에서 열어보면 어디를 어떻게 고쳤는지 정확히 알 수 있다. 반면에 MS 파워포인트와 오픈오피스의 호환 수준은 충분히 높지는 않은 것 같다.

(6) 네트워크 프린터 설정이 무지하게 쉬워요

내가 보기로는 윈도에서의 설정보다 더 간편하고 직관적인 것 같다. 하지만, 다양한 프린터 옵션(특히, 내가 잘 쓰는 한 장의 종이에 여러 페이지를 모아서 찍기)을 조정하는 방식에 있어서는 윈도와 리눅스는 서로 다른 방식을 취하고 있는데 일장일단이 있는 것 같다. 어쨌든 되긴 다 된다.

(7) 멀티미디어도 빵빵해요

예를 들어, 웹에서 윈앰프용 MP3 스트리밍 플레이 리스트를 클릭하면 자동으로 Totem 플레이어가 받아서 음악을 들려준다. 볼륨 조절도 직관적인 트레이 아이콘으로 할 수 있고 마우스 휠로 볼륨 조절도 되는 등 윈도에서 하던 방식을 거의 그대로 쓸 수 있다.

데비안을 X30 깔아서 한참 동안 쓰다가 이런 저런 문제로 포기하고 윈도로 투항했는데 다시 돌아온 리눅스 의외로 괜찮더라. 물론, 인터넷 뱅킹 등 윈도를 쓰지 않을 수 없는 경우가 있어서 버츄얼박스(한 운영체제 위에서 다른 운영체제를 돌릴 수 있게 하는 가상 머신 프로그램. 이 외에도 vmware, parallels 등의 제품이 있다)를 깔고 윈도를 깔긴 했지만 아주 제한적인 경우에만 써도 될 것 같다.

신고
posted by 신묘군
유닉스/리눅스 환경에서 파일을 조건에 따라 뒤지는데에는 find라는 강력한 명령이 있다. 또한, 특정 조건의 문자열을 매칭하는데에는 grep이라는 강력한 명령이 있다. 이 둘을 결합하면 일정한 조건을 만족하는 모든 파일에 대하여 특정한 조건의 문자열을 가지는 경우를 모두 찾을 수 있다.

find . -exec grep 문자열 '{}' \; -print



신고
posted by 신묘군