Tag Archives: sawfish

sawfish 윈도우 메니저

유닉스의 X 윈도우는 윈도우 테두리와 동작등을 담당하는 부분이 빠져있는데, 이 부분을 윈도우 메니저가 처리합니다. 수십 개 이상의 윈도우 메니저가 존재하며, 각각 기능이 천차만별이라 같은 X 윈도우를 사용한다고 해도 모양이나 사용방법은 전혀 틀려집니다. 같은 윈도우 메니저라 해도 설정이 자유로운것이 많아서 모양이나 동작등도 사용자들이 커스터마이징을 많이해서 사용합니다.

예전에 GNOME 데스크탑의 디폴트 윈도우 메니저였던 sawfish가 안타깝게 metacity에게 자리를 내어주었지만… 제 개인적인 생각으론 metacity는 기능이 좀 부족하더군요. 커스터마이징 면에서 낮은 점수를 받을수 밖에 없습니다. “일반 사용자들을 위한 디폴트 윈도우 메니저”로 선택되었으니 커스터마이징은 중요한 요소가 아니였나봅니다.

예전엔 이름이 sawmill이였는데… 다른 소프트웨어가 그 이름을 사용중이라고 sawfish로 바꿨습니다. sawfish는 LISP 와 유사한 언어(rep)로 커스터마이징이 가능합니다 :) 물론 LISP을 알면 더 자유로워질수 있지만(^^), 몰라도 sawfish-ui 로 커스터마이징이 가능합니다.

X 윈도우의 윈도우 메니저들은 대부분 가상 데스크탑을 지원하는데.. MS윈도우즈에 있는 가상 데스크탑 프로그램들은 많이 구해서 사용해봤는데 많이 부족하더군요. 기능이 부족하기 보다, 기본적인 기능이 제대로 동작하는걸 찾지 못했습니다. 데스크탑 이동할때 포커스를 제대로 잡아주는 프로그램을 아직 접하지 못했네요. litestep이 그나마 사용할만하지만 이건 쉡을 바꾸는거라 불편이 따르더군요. 하여간 제가 윈도우즈용 프로그램도 개발하지만, 데스크탑에 리눅스를 깐건 이 가상 데스크탑 기능이 정말 그리워서였죠. 옆에 윈도우즈 노트북이 있으니 윈도우 프로그래밍 작업은 원격으로 연결해서 작업하거나 vmware에서 작업합니다.  2000년, 2001년에 있던 회사에서는 유닉스 프로그램만 개발해서 리눅스를 데스크탑으로 썼었습니다. 이때 썼던 윈도우 메니저가 sawfish 였고요.

뭐 X 윈도우와 윈도우 메니저를 접한건 94년 정도로 올라가는데 (학교 워크스테이션실), 그때 있던게 mwm(motif)과 openlook(olwm?)과 fvwm이였죠. fvwm이 오픈소스라 fvwm을 사용했었습니다. fvwm의 추억의 색(붉은색+하늘색)은 아직도 기억에 남네요. 그후 리눅스를 PC에 깔면서 꽤 많은 윈도우 메니저를 사용해봤습니다. 대부분 쓸만하지만 저는 화려한거보다는 가볍고 빠르고 커스터마이징이 자유로운걸 사용하게 되더군요. fvwm2, icewm 등을 많이 썼었고, 결국 sawfish로 정착했습니다.

꽤 오랜만에 회사의 메인 PC에 리눅스(우분투)를 깔았습니다. 윈도우즈 개발은 원격으로 옆의 노트북이나 집 PC에 연결해서 개발합니다. 노트북의 화면을 활용하기 위해서 synergy를 사용하기도 했었는데 저는 가상 데스크탑이 더 편하더군요. 오래전에 듀얼 모니터(20인치 CRT)도 사용해봤지만 고개 왔다갔다 하는거보다 키보드로 가상화면 이동하는게 더 편하더군요.

sawfish에서 제가 좋아하는 기능이 pack window와 창채우기(maximize-fill-window) 기능입니다. 단축키 잘 할당해 놓으면 창위치 잡기 위해서 마우스로 손이 갈 필요가 거의 없습니다. 그리고 마우스로 위치와 크기 조정하는거보다 더 빠르고 잘 배치를 할수 있죠.

아래는 제가 사용중인 설정입니다.

(custom-set-keymap
(quote global-keymap)
(quote (keymap
    (cycle-windows . “M-TAB”)
    (show-desktop . “H-d”)
    ((run-shell-command “nautilus”) . “H-e”)
    ((run-shell-command “vmware”) . “H-v”)
    ((run-shell-command “evolution –component=mail”) . “H-m”)
    ((run-shell-command “gnome-terminal”) . “H-t”)
    ((run-shell-command “firefox”) . “H-f”)
    ((activate-workspace 1) . “H-1″)
    ((activate-workspace 2) . “H-2″)
    ((activate-workspace 3) . “H-3″)
    ((activate-workspace 4) . “H-4″)
    ((activate-workspace 5) . “H-5″)
    ((activate-workspace 6) . “H-6″)
    (next-workspace . “M-C-Right”)
    (pack-window-left . “C-S-Left”)
    (pack-window-right . “C-S-Right”)
    (pack-window-up . “C-S-Up”)
    (pack-window-down . “C-S-Down”)
    (maximize-fill-window-toggle . “C-F”)
    (maximize-window-vertically-toggle . “C-V”)
    (maximize-fill-window-horizontally-toggle . “C-H”)
    (pack-window-up . “C-I”)
    (pack-window-down . “C-K”)
    (pack-window-left . “C-J”)
    (pack-window-right . “C-L”)
    (previous-workspace . “M-C-Left”))))
(custom-set-keymap
(quote window-keymap)
(quote (keymap
    (raise-and-pass-through-click . “Button1-Click”)
    (size-window-subtract-column . “H-Left”)
    (size-window-add-column . “H-Right”)
    (size-window-subtract-row . “H-Up”)
    (size-window-add-row . “H-Down”)
    (send-to-next-workspace . “M-C-S-Right”)
    (send-to-previous-workspace . “M-C-S-Left”)
    (move-window-interactively . “W-Button1-Move”)
    (popup-window-menu . “W-Button2-Click”)
    (delete-window-instance . “M-F4″)
    (resize-window-interactively . “W-Button3-Move”)
    (lower-window . “M-C-Down”)
    (raise-window . “M-C-Up”))))

가상화면 전환은 Ctrl-Alt-Left, Ctrl-Alt-Right, Win-1 ~ Win-6 까지 이용합니다. 창을 다른 가상화면으로 옮길때는 Ctrl-Alt-Shift-Left, Ctrl-Alt-Shift-Right을 이용합니다. 창이동은 Ctrl-Shift-화살표를 이용합니다. 창이동하는 함수가 pack-window-up … 등의 함수인데.. 픽셀 단위로 움직이는게 아니라 다른 창에 붙도록 이동합니다. 익숙해지면 편합니다. 원하는 곳에 잘 붙지 않을때가 있는데… 사용해보면 익숙해집니다. 원하는 위치를 잡으면… Ctrl-Shift-f 로 빈곳을 채울수 있습니다. 다른 창 영역은 침범하지 않으니 다른 창들과 함께 창을 나눠서 쓸때 딱입니다. Ctrl-Shift-v와 Ctrl-Shift-h로 세로/가로 따로 창을 채울수도 있습니다.

저는 주로 가상화면에 한꺼번에 띄울 창들을 실행하고, 창들을 Ctrl-Shift-화살표로 원하는 곳으로 이동하고, 크게 보고 싶은 창부터 창채우기합니다. 창크기 조절을 세밀하게 하고 싶으면 Win-커서키를 눌러서 조절하던가, 마우스로 창크기를 조절하고 창채우기하면 됩니다. 창크기 조절할때 마우스로 끝 잡기가 귀찮아서 Ctrl-오른쪽 마우스(resize-window-interactively) 누르면 창크기가 바로 조절되게 세팅했습니다.

Win-e, f, m, t, v키에는 자주 사용하는 어플들을 등록했습니다. 탐색기(nautilus), Firefox, Mail, Terminal, VmWare.

스크린샷을 찍어봤지만.. 뭐 특별한건 없습니다. 일반 그놈 패널에… 가상화면마다 창들이 많이 붙어있죠. 오른쪽 메신저(Pidgin)은 MSN+nateon 같이 사용하니 편하더군요. 친구리스트는 gimp로 블라인딩처리~

원격접속(rdesktop)을 이용할때는 키보드는 모두 rdesktop으로 가게 했습니다. 가상화면 이동할수 있으면 좋겠지만… 윈도우메니저에서 먼저 키보드 처리하면, 윈도우즈 사용시 여러가지로 불편하더군요. 대신 가상화면창에서 마우스 휠을 움직입니다. 마우스 휠로 가상화면 이동이 가능합니다. 그리고 원격접속이나 vmware는 가상화면을 4,5,6번으로 고정시켰습니다. 4번은 옆의 노트북 rdesktop, 5번은 vmware, 6번은 집 rdesktop. 메일은 2번, 기타 작업 공간은 1, 3번을 쓰고 있습니다. 1번은 메신저와 가벼운 웹브라우징, 3번은 노트북(4번)과 같이 작업할때 쓰는 공간입니다. 그리고 혹시를 위해서 가상화면 7, 8번은 여유 공간입니다.

rdesktop은 아래처럼 띄웁니다.

rdesktop.sh -u 아이디 -p 패스워드 -k ko -g workarea -r disk:root=/ -r sound:local -T “rdesktop – notebook” 아이피주소

rdesktop.sh은 rdesktop을 호출하기 전에 사운드 장치를 공유할수 있도록 했습니다.

% cat /usr/bin/rdesktop.sh
#!/bin/sh
LD_PRELOAD=libaoss.so exec /usr/bin/rdesktop “$@”

-k ko는 한영키를 위해서 필요하고, -g workarea 옵션을 주어 전체 공간을 사용하도록 합니다. 원격에서 리눅스 폴더 전체 보이게하고, 소리는 리눅스로 보내도록 했고, 창이름을 지정했습니다. 창 이름을 지정하여 sawfish에서 몇가지 작업을 해줍니다.

(custom-set-typed-variable
(quote match-window-profile)
(quote
    (((WM_NAME . “^rdesktop – notebook$”))
     (workspace . 4)
     (maximized . all)
     (focus-click-through . #t)
     (frame-type . none))
    (((WM_NAME . “^rdesktop – home$”))
     (workspace . 6)
     (maximized . all)
     (focus-click-through . #t)
     (frame-type . none))
    (((WM_CLASS . “^Vmware/vmware$”))
     (workspace . 5)
     (maximized . all)
     (frame-type . none))))

가상화면을 4번으로 고정시키고, 창크기를 최대화하고, 창테두리를 안그리게 했습니다. 그놈패널을 제외한 모든 영역이 윈도우즈가 차지하도록 했습니다 :)


요즘 제가 사용하고 있는 환경인데… 역시 불편한점은 있습니다. 먼저 메신저로 받은 파일을 네트워크에 공유해서 받아야하는 불편함이 있습니다. 대부분 파일들은 리눅스(오픈오피스)에서도 잘 열리지만.. (docx 포함) 편집은 아직 불편한 점이 많더군요. 왠만하면 리눅스에서 처리하고, 꼭 필요하다면 윈도우즈 쪽으로 옮겨서 작업하고 있습니다.

11월11일 추가내용: 우분투에서 설정 방법

우분투의 패키지 메니저인 synaptic에서 sawfish로 검색해서 설치했습니다. 아래처럼 설치되어있습니다.


그리고 Gnome 세션을 사용하고 홈디렉토리에 .gnomerc를 아래처럼 만들어주고 다시 로그인하면 윈도우 메니저가 sawfish로 변경됩니다.

% cat ~/.gnomerc
export WINDOW_MANAGER=/usr/bin/sawfish