노트북을 이용해 듀얼 모니터처럼 활용하기 위한 간략한 지침서.

지리즈의 이미지

이 문서는 gentoo위주로 작성되어 있으며, 중상급자들을 위한 간략한 지침서입니다.
구체적인 내용은 생략되어 했으며, 차후에 자세한 Howto는 wiki에 올릴 수 있기를 바랍니다.

기본적인 방향은 이러합니다.
1. 노트북시스템은 데스크탑에서 빌드한다.(gentoo)
2. 노트북을 nfsroot로 사용한다(하드디스크 전력소모를 줄인다)
3. 노트북은 xorg의 vnc 모듈을 사용하고, 데스크탑쪽에는 x2vnc를 이용해서 원격제어를 쉽게 한다.
4. x프로토콜을 이용해서 모든 어플리케이션은 데스크탑쪽에서 실행되고 노트북은 X호스트로만 사용한다.

추가 방향은
arts를 설치하여 데스크탑작업을 노트북을 통해 침대위에서 한다!

주의.
zirize는 데스크탑의 호스트명입니다.
crusoe는 노트북의 호스트명입니다.
zirize는 제 아이디입니다.
zirize@zirize는 데스크탑에서의 zirize이며
zirize@crusoe는 노트북에서 zirize를 의미합니다.

데스크탑의 IP=zirize는 192.168.10.4 입니다.
노트북의 IP=crusoe는 192.168.10.96 입니다.

본문.

18.1inch LCD와 19inch LG Flatron CRT모니터로 듀얼시스템을 사용하다가,
최근 전기값문제로 결국 19Inch CRT는 처분해 버렸습니다.
막상 듀얼 모니터를 사용할 때는 몰랐는데,
싱글모니터로 돌아오니 여간 불편한 것이 아니더군요.

그래서, 집에서 거의 사용하지 않는 노트북(Crusoe 5600,14.1 1024x768x16Depth LCD,
533MHz, 램256M, 몇차례의 낙하사고로 시스템일부가 오동작 엄청느림)을
활용해 듀얼 모니터처럼 사용하기로 마음먹었습니다.

일단, 제가 Gentoo사용자임으로,
모니터대용 노트북(이하 노트북) 배포본은 Gentoo를 이용했습니다.
사양이 사양인지라 Gentoo를 이용해 노트북시스템을 구축하는 것도 여간 큰일이 아닙니다.

일단 데스크탑시스템에서 노트북환경을 빌드하기로 하고,
젠투의 전통적인 설치방법 + nfsroot를 사용하기로 했습니다.

일단 제 데스크탑이 AMD64 시스템인지라 일반적인 방법으로는 설치하지 않았고,
32Bit Chroot Guide for Gentoo/AMD64를 이용해서 시스템을 빌드했습니다.
다만, 이때 chroot된 32bit바이너리들이 실행될 것은 내 데스크탑이 아니라, 노트북임으로
make.conf의 CFLAG 등은 크루소칩에 적절한 것으로 설정했습니다.

여기서 한가지 주의할 것이 있는 커널,모질라(Firefox), 혹은 mplayer같이 스스로가 시스템을
디텍트하는 패키지들은 정상적으로 빌드가 되지 않습니다.

설치된 패키지는 x.org, xfce4, vnc, arts, gdm, xhost,nabi, grub,alsa관련된 패키지들,cpufrequtil...
vnc는 서버기능이 가능하게 했습니다.

일반적인 Gentoo설치과정과 동일합니다.

커널설치시에는 export ARCH=i386을 선언한 후 처리했습니다.
제 시스템이 AMD64이기 때문에 make가 arch를 amd64로 진행하기 때문입니다.
커널이 nfsroot를 사용해야 함으로 이더넷,nfsclient,커널레벨 네트워크 설정 기능등을 빌트인으로 했습니다.
nfsroot마운트에 대한 자세한 내용은 커널소스에 포함된 /usr/src/linux/Documentation/nfsroot.txt를 참조하세요.

어느정도 노트북용 환경이 데스트탑내부에 완성되면 NFS로 익스포트 해줘야 합니다.
물론 nfs를 설치해야 겠죠.

여기서 nfs로 export하기 전에 bind해 놓은 chroot된 디렉토리의 /dev나 /proc 등은 umount를 해줍니다.
zirize@zirize ~ $ cat /etc/exports
# /etc/exports: NFS file systems being exported. See exports(5).
/mnt/crusoe/gentoo crusoe(rw,no_root_squash,async)
zirize@zirize ~ $ grep crusoe /etc/hosts
192.168.10.96 crusoe.assadal.co.kr crusoe
zirize@zirize ~ $ su -c "cp -a /mnt/crusoe/gentoo/boot /mnt/crusoe/gentoo/mnt"
zirize@zirize ~ $ su -c "/etc/init.d/nfs start"

커널과 nfs설정이 끝나면, 라이브시디를 이용해 노트북에서 부팅합니다.
저는 knoppix를 사용했습니다. fdisk로 해서 /boot파티션(100M), swap파티션(300M)을 잡아 줬습니다.

왜 NFSroot를 이용하는데, 파티션이 필요할까 하시는 분이 계시겠지만,
노트북 이더넷이 넷부트를 지원하지 않으면 별수가 없습니다.
또한 넷부트는 정말 어려워요 --;;

일단 라이브시디가 nfs마운트를 지원한다면, 편리하지만, 만약 그렇지 않다면 삼바를 이용하셔야 합니다.
삼바를 이용할 경우에는 unix익스텐션을 지원하도록 하셔야 할 것 같습니다.

root@livecd ~ #mkdir /mnt/gentoo
root@livecd ~ #mount -t nfs 192.168.10.4:/mnt/crusoe/gentoo /mnt/gentoo
root@livecd ~ #mount -t ext3 LABEL=/boot /mnt/gentoo/boot
root@livecd ~ #mount /dev /mnt/gentoo/dev -o bind
root@livecd ~ #mount -t proc none proc /mnt/gentoo/proc
root@livecd ~ #chroot /mnt/gentoo /bin/sh
sh-3.1#su - #I think same as source /etc/profile
root@livecd ~ #cp -a /mnt/boot/* /boot
root@livecd ~ #grub

grub을 이용해서 부팅이 가능하게 해놓고,
fstab과 grub.conf를 적절히 수정합니다.

root@livecd ~ # grep kernel /boot/grub/grub.conf
kernel /vmlinuz-2.6.18-gentoo-r4 ro root=/dev/nfs quiet nfsroot=192.168.10.4:/mnt/crusoe/gentoo,rsize=8192 ip=192.168.10.96:192.168.10.4:192.168.10.1:255.255.255.0:crusoe:eth0:off
root@livecd ~ # grep nfs /etc/fstab
/dev/nfs / ext3 defaults 1 1

nfsroot마운트에 대한 자세한 내용은 커널소스에 포함된 /usr/src/linux/Documentation/nfsroot.txt를 참조하세요.

일단 eth0은 커널이 설정하기 때문에 rc-update del eth0해서 부팅시 eht0에 대한 설정을 진행하지 않게 합니다.

gentoo 설치에 익숙하신 분들은 커다란 문제점 없이,
정상적인 Gentoo시작을 보실 겁니다.

추가 작업.
1. vnc http://www.realvnc.com/products/free/4.1/x0.html 참조할껏.

노트북의 /etc/X11/xorg.conf 파일의 모듈 색션에
load "VNC"
를 또한 스크린 색션에
Option "SecurityTypes" "None"
을 추가한 후 x를 재시작합니다.

krdc나 vncviewer로 보면 패스워드 없이 바로 접속이 가능합니다.

데스크탑에서 x2vnc로 접속해 봅니다.
zirize@zirize ~ $x2vnc -west 192.168.10.96:0

화면 왼쪽으로 마우스를 옮기면, 커서가 노트북으로 옮겨가는 것을 볼 수 있으실 겁니다.
또한, 키보드 입력도 정상적으로 동작합니다.

2. gdm 설정.
루트에서 gdmsetup을 이용해서,
보안->X서버에서 TCP연결 거부에 체크를 지워줍니다.(필수!)
기타 특정사용자로 자동로그인되게 설정합니다.(필수는 아님)
/etc/init.d/xdm restart해서
gdm을 다시시작해 줍니다.

3. 원격실행(?)
노트북에서
zirize@crusoe ~ $xhost +
를 실행한후,(일반사용자) 데스크탑에서
zirize@zirize ~ $DISPLAY="crusoe:0.0" xclock
를 실행합니다.

만약 notebook에서 xclock이 보인다면 성공한 것입니다.
zirize@zirize ~ $DISPLAY="crusoe:0.0" gmplayer -vo xv

동영상을 플레이해봅니다. 100M 대역폭이라면 놀라울 만큼이나 볼만한 수준의 영상이 보일 것입니다.

zirize@crusoe ~ $cat ~/bin/xhost.sh
#!/bin/sh
/usr/bin/xhost +

확인 끝나면, 시작프로그램에 위의 셀스크립트를 등록해서,
매번 로그인할 때마다 자동으로 실행하게 해줍니다.

4. 원격에서 쉽게 실행하기.
ssh-keygen를 이용해서 패스워드 없이 자동으로 로그인하도록 합니다.
자세한 내용은 http://wiki.kldp.org/wiki.php/DocbookSgml/SSH-KLDP 를 참조하시길 바랍니다

zirize@crusoe ~ $ssh zirize
zirize@zirize ~ $
(위의 ssh의 zirize는 ID가 아니라, 노트북에 등록되어진 데스크탑의 호스트명입니다.)

zirize@crusoe ~ $ssh zirize ls
..
..
zirize@crusoe ~ $
ls 명령이 실행가능한지 확인합니다.

zirize@zirize ~ $cd .bin
zirize@zirize ~/.bin $ pwd
/home/zirize/.bin
zirize@zirize ~/.bin $ cat konsole.sh
#!/bin/sh
export LANG=ko_KR.UTF-8
export LC_ALL=$LANG
export XMODIFIERS="@im=nabi"
export XIM=nabi
export XIM_PROGRAM="/usr/bin/nabi"
export GTK_IM_MODULE=xim
export DISPLAY="crusoe:0.0"
/usr/kde/3.5/bin/konsole
zirize@zirize ~/.bin $ ls -l konsole.sh
-rwxr-xr-x 1 zirize zirize 213 2006-12-25 15:21 konsole.sh

일단 보편적인 ssh로 실행되는 명령은 환경변수가 적용되지 않으므로,
위와 같은 쉘스크립트를 작성합니다.
특히 환경변수내용중 locale에 관련된 두줄은 데스크탑의 설정을,
나머지는 노트북환경에 관련된 것입니다.
저는 양쪽다 이부분이 동일하기 때문에 혼란은 없었습니다.

zirize@crusoe ~ $ssh zirize .bin/konsole.sh
정상적으로 konsole이 실행되어야 합니다.

위의 내용을 적당히 메뉴에 등록해서 사용합니다.

결론.
여기 까지 수준이면, 상당히 듀얼모니터 답게 동작합니다.
물런 xinerama처럼 좌우로 창을 옮기지는 못하지만,
(혹시 xinerama를 지원하게 컴파일하면 가능한지는 테스트하지 못했습니다.)
충분히 사용하는데는 부담이 없습니다.

여기서, 몇가지 문제가 있는데,

첫째로 편리를 생각해서 보안은 전혀 고려하지 않았다는 점입니다.
제가 보호되는 네트워크내부에 있기 때문입니다만...
만약, 에뮬같은 것을 이용하면, NAT취약점을 이용해서 사설 내트워크 내부로도 외부자가 공격할 수 있으므로,
iptables같은 것으로 보안이 되도록 설정하는 편이 안전합니다.

두번째, xhost +로 하는 대신 xauth를 이용한 방법도 있습니다만...
몇차례시도해보다 잘안되서 포기했습니다.

세번째 gdm에서 아에 원격로그인하는 방법도 있습니다.
다만, 이 경우 데스크탑과 노트북이 다른 환경을 사용하는 것에서 발생하는 문제와
자동로그인 해결등때문에 (특히 시스템이 느리면, 자동로그인이 매우 귀중합니다.)
이 방법은 포기했습니다.

장점.
/boot를 마운트하지 않으면(gentoo는 기본적으로 마운트하지 않죠?)
컴퓨터는 그냥 끄면 됩니다. ^^ 하드디스크를 안쓰기 때문입니다.

보너스.
arts를 이용한 원격소리 재생.
이는 듀얼모니터 기능과는 거리가 멈니다.

다만, 침대에 누어서 미드보는데는 매우 좋더군요.(폐인모드--;;)
제 노트북에서 직접 플레이하는 것보다 프레임레이트가 더 나옵니다. --;;;

일단 mplayer와 같은 재생기가 arts가 지원되게 빌드되어야 합니다.

/usr/kde/3.5/bin/artsd -F 10 -S 4096 -a alsa -n -b 16 -s 60 -m artsmessage -l 3 -f &
노트북,데스크탑 양쪽에 위와 같이 실행해 줍니다.
여기서 -n 플래그는 enable network transparency를 의미합니다.
kde/arts 사용자라면, kde제어판에서 사운드시스템에서 Enabled networked sound를 체크하고,
사운드서버를 재시작해주시면 됩니다.

~/.mcoprc를 아래와 같이 수정해줍니다.
zirize@zirize ~ $ cat .mcoprc
GlobalComm=Arts::X11GlobalComm

zirize@zirize ~ $ DISPLAY="crusoe:0.0" gmplayer -vo xv -ao arts

소리와 영상을 다 같이 들으실 수 있습니다.

댓글

권순선의 이미지

체감 속도는 어떤가요?

지리즈의 이미지

ssh 커맨드 실행을 하기 때문에 로그인과정등 때문에
어플리케이션 시작시 0.1~0.2초가량 지연되는 것을 제외하고는
동작자체는 매우 쾌적합니다.
재미있는 것은 노트북 로컬 어플리케이션을 실행시킬 때보다 훨씬 빠릅다는 것입니다.

동영상이 재생될 수준이기 때문에,
웬만한 다른 어플리케이션에서는 문제를 경험하지 못했습니다.
vmplayer도 원할하게 잘 실행됩니다.

익히 잘 아시다 싶이 X의 특징상 글꼴(font)는 로컬 랜더링입니다.
따라서, Firefox와 같은 웹부라우저도 아주 자연스럽게 움직입니다.

다만, vnc 프로토콜을 경유해서 원격제어하기 때문에,
로컬때와 원격때가 마우스 움직임의 차이가 미묘하게 발생합니다.
익숙해져야 할 부분인 것 같습니다.

또한, 만약에 동영상을 시청하거나 해서 트래픽이 차거나,
혹은 노트북쪽에 어떠한 이유로든 과부하가 발생할 경우,
원격제어시 버벅거리는 느낌이 듭니다.
물론 노트북마우스로 제어하면 자연스럽습니다.

There is no spoon. Neo from the Matrix 1999.

There is no spoon. Neo from the Matrix 1999.

junichel의 이미지

저 같은 경우는 지리스님과는 반대로 노트북 성능은 괜찮고, 데스크탑 성능은 엉망입니다.
그래서 생각한 것이 그놈의 원격 로그인을 이용해서 데스크탑에서 즐거운 성능을 누리는 것인데
이 글 읽은김에 일요일에 한번 해보렵니다.
--
끝까지 타오르는거다!

--
끝까지 타오르는거다!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.