레이블이 우분투인 게시물을 표시합니다. 모든 게시물 표시
레이블이 우분투인 게시물을 표시합니다. 모든 게시물 표시

2017/10/22

Ubuntu 17.10 설치 및 사용


(2018/1/10 추가)

우분투 Meltdown/Spectre kernel patch 관련

오늘(현지 시간 1월 9일) 우분투의 대대적인 kernel patch가 있었다. 그런데 언제부터인가 우분투가 자동으로 kernel을 update해 버리고 있었다. 재부팅하니 NVIDIA로 로그인이 안된다. <Alt>+<Ctrl>+<F3>로 console 로그인은 되었는데 잠시 후 먹통이 돼 버렸다. 참고로 NVIDIA 상용 드라이버가 정상 동작할 때는 console 로그인을 해도 black screen인데 오늘 같은 경우에는 정상 로그인이 되기 때문에 NVIDIA 드라이버가 로딩되지 않았음을 알 수 있다.

강제 재부팅해서 이전 커널 버전으로 부팅하고 NVIDIA 홈페이지 갔더니 1월 4일자 384.111 버전이 올라왔더라. 내려 받은 후 새 커널(4.13.0-25-generic #29)의 recovery mode로 부팅해서 NVIDIA 새 드라이버 설치하고 재부팅하니 새 커널에서 NVIDIA 로그인이 잘 된다.

구글링 해 보니 역시나 우분투에서 커널과 NVIDIA 드라이버를 동시에 patch 했는데, 내가 우분투에 기본 탑재된 NVIDIA 드라이버를 사용하지 않았기 때문에 문제가 발생한 것인지는 확실하진 않다. 다만 NVIDIA 사용자들의 아우성이 곳곳에 보이더라... 커널 patch 후 PC 성능 저하 문제가 생길지는 두고 봐야할 듯...

참고로, 우분투 자동 update 막는 법도 구글링 해 보니, /etc/apt/apt.conf.d/10periodic 파일에서, 아래의 "1"을 "0"으로 바꾸면 자동 update를 막을 수 있단다.
APT::Periodic::Update-Package-Lists "1";

기타 참고 사항

우분투 17.10에 기본 탑재된 커널이 Lenovo, Acer 등 일부 노트북 기종의 BIOS 셋팅을 저장할 수 없게 만드는 문제가 발생해서 캐노니컬이 우분투 17.10 설치 iso 이미지를 우분투 사이트에서 내렸었는데, 새로운 17.10 설치 iso 이미지가 공식적으로 1월 11일에 올라올 예정이란다. 아마 이번 kernel patch까지 반영될 듯하다.

--------------------------------------------------------------

(2017/11/10 추가)

우분투 17.10에 fcitx 설치

우분투 17.10에서 Gnome-shell이 데스크탑이 되고 나니까 기본 입력기인 ibus와 다른 입력기들이 충돌하는 문제가 생긴다. fcitx를 설치해서 언어 설정에서 입력기를 ibus에서 fcitx로 바꾸더라도 ibus 프로세스들이 살아 있는 문제와 Gnome 상단 패널(또는 Top Bar)에 ibus 설정 icon이 남아 있는 등의 문제가 생긴다.

간단한 해결책은, 1) ibus를 지우고, 2) fcitx-hangul을 설치하고 나서, 3) 언어 설정에서 입력기를 fcitx로 지정하고 4) 재부팅 하면 된다. 마지막으로, 5) gnome-shell이 fcitx를 자동 실행하도록 해두는게 좋다.

$ sudo apt remove ibus
$ sudo apt install fcitx-hangul

1) 에서 ibus 지우기 겁나면 ibus 프로세스가 아예 안뜨도록 하면 되는데 가장 좋은 방법은 아래와 같이 파일명을 바꿔 버려도 된다.

$ sudo mv /usr/bin/ibus-daemon /usr/bin/ibus-daemon.org

그리고, 아래 글에 자세히 다루지 않았었는데 Gnome Tweak Tool을 설치해 두면 여러모로 편리하다. 그리고 Gnome extensions를 사용할 경우에는 chrome-gnome-shell 패키지도 유용하다. 이는 Firefox나 Chrome에서 Gnome extensions를 설치/Update/삭제할 수 있게 해 준다.

$ sudo apt install gnome-tweak-tool chrome-gnome-shell

fcitx는 gnome-shell에서 logout 하고 재로그인 하면 자동으로 기동되지 않는 문제가 있다. Gnome Tweak Tool 에서 [Startup Applications] Tab > [+] 버튼을 누른 뒤 나타나는 "Fcitx"를 선택해서 [Add] 해 주면 된다.

fcitx 설정 방법은 예전과 똑같다. fcitx도 ibus처럼 Wayland 환경에서도 잘 동작한다. 다만, 모든 입력기 들이 진정으로 Wayland를 지원하고 있다고 보기는 어렵다.

우분투 17.10 사용 소감 추가

앞서 얘기한 바 있지만 시스템 안정성 문제 때문에, Wayland를 사용하고 싶으면 Nvidia 등의 상용 비디오 드라이버를 설치하지 않는 것이 좋고, 상용 비디오 드라이버를 사용하고 싶으면 Wayland 대신 Xorg 서버 환경에서 우분투를 사용하는 것이 좋다.

기본 우분투 17.10 환경에서 Ubuntu dock외에 Hide top bar와 Pixel saver 2개의 Gnome extension만 사용해도 이전의 Unity Desktop과 비슷한 느낌을 가질 수는 있게 됐다. 초기의 자잘한 UI 버그들이 수정되어 그럭저럭 안정감있게 쓸만하다.


--------------------------------------------------------------

지난 주에 우분투 17.10이 공식 배포돼서 주말에 설치해서 사용해 보았다. 바뀌는 게 많아서 18.04 LTS 버전이 나오면 Clean Install 할까 했는데 17.04에서 Wayland를 써 보고 나니 17.10에서 얼마나 잘 돌아가나 궁금해서 오랜만에 하드디스크의 iso 파일을 이용해 Clean Install을 감행했다.

우분투 17.10에서 달라진 점들은 우분투의 Release Notes를 참고할 필요가 있다. 몇 가지만 소개하면,
  •  Unity Desktop이 Gnome shell 3.26 Desktop으로 대체 
    • 단, Original Gnome shell을 사용하고 싶다면 gnome-session 패키지 설치 필요
    • 기본 Ubuntu Desktop은 Dash to Dock(Ubuntu Dock) 등 gnome 일부 기능을 cusomize 시킴
  • Display server가 Xorg에서 Wayland로 대체
  • Display manager가 lightdm에서 gdm3로 대체
  • Desktop 32-bit 설치 iso 이미지 파일은 공식적으로 중단
  • Network 유틸리티 들이 새롭게 대체됨
    • ifupdown 대신 netplan 사용
    • net-tools(ifconfig/netstat 등 포함)가 기본 설치되지 않고 ip 명령 권장
  • Linux kernel 4.13 채택: Graphics/CPU 성능 향상, 파일시스템 개선 등
이번 버전은 크게 바뀐 것이 많아서 상대적으로 배포까지의 시간이 부족했을 가능성이 높다. 그래서인지 설치 iso 이미지는 Xorg 서버로만 동작하므로 실제로 설치하지 않고는 Wayland 서버를 사용해 볼 수 없다. 

Gnome Desktop 환경

Unity Desktop을 사용하던 사람들은 여러가지 불편함을 느낄 수 있다. Unity Launcher 대신 Dash to Dock(Gnome extension)을 수정한 Ubuntu Dock이 비슷하게 보이지만 Qt 앱의 경우 Dock에 고정시키기도 불편하고 실행시 별개의 아이콘이 뜨는 문제라든가 Minimize 기능 등 자잘하게 안되는 것들이 있다. 무엇보다 Unity의 Global menu가 사라져서 VirtualBox 등에서 화면 수직폭이 다시 늘어나는 불편함이 있다.

개인적으로는 어차피 Gnome extension을 사용할 거라면 Dash to Dock 보다는 Dash to Panel에 Hide Top Bar를 결합한 원래의 Gnome Desktop이 더 마음에 든다. 다만, 그것이 Windows UI와 거의 비슷하기 때문에 우분투 입장에서 꺼려지는 측면이 있었을 것이다.

Javascript를 사용하는 Gnome extensions를 사용해야 하는 것도 장단점이 있어서 사용자들의 호불호가 극단적으로 나뉜다. OS의 일부 기능을 인터넷 상의 누군가에게 의존해야 하는 문제 때문이다. 보안 문제가 생길 수도 있고, 일부 extension 들은 버전 업에 따른 유지보수가 제대로 이루어 지지 않거나 중단되는 경우도 많다. 머, 장점은 좀 알면 내 맘대로 데스크탑을 바꿀 수 있다는 것이다.

기본 Wayland 서버 환경 (Wayland + nouveau Driver)

우분투 17.10을 설치하고 나면 로그인시 사용자 id를 click하면 기어모양의 아이콘이 패스워드 창 밑에 보이는데 이걸 click하면 두개의 Session이 보인다. "Ubuntu"와 "Ubuntu on Xorg"이다. 이 중에서 "Ubuntu"는 곧 "Ubuntu on Wayland"이다. 오리지널 Gnome Shell을 설치하고 재 부팅하면 "Gnome"과 "Gnome on Xorg" 두 개의 Session이 추가 되는데 여기서도 "Gnome" = "Gnome on Wayland"이다. 로그인시 그냥 id와 패스워드를 입력하고 로그인하면 "Ubuntu" Session으로 로그인된다. 그리고 별도로 Nvidia와 같은 상용 드라이버를 설치하지 않았다면 기본 nouveau 드라이버 환경이 된다. 

오랫동안 써 보진 못했지만 Wayland + nouveau Driver 환경은 이전 버전에 비해 상대적으로 매우 빠르다는 느낌을 준다. 그리고, Wayland + Nvidia Driver 환경에 비해 좀 느릴 수도 있지만 훨씬 안정적으로 동작한다.

  • GUI 앱을 터미널에서 root 권한으로 실행할 수 없음
    • 필요한 기능만 PolicyKit로 root 권한을 주는 앱은 실행 가능
    •  아래와 같이 우회적인 방법으로 gparted, synaptic 등 실행 가능
      • $ sudo xhost +SI:localuser:root
  • 잘 알려진 X11 앱들(xkill, xrandr, sdotool, xsel 등)이 Wayland session이나 앱에서 동작하지 않음
  • Game과 같은 특정 앱이 모니터 해상도를 변경할 수 없음
    • 단, 해상도를 먼저 바꾸면 Game 실행 가능할 수도...
  • 보안 문제를 차단하기 위해 일반 앱에서 화면 capture/casting 불가
    • System에서 허용한 앱만 가능
  • 느린 시스템에서 Mouse pointer가 느리게 반응할 수 있음(버그)
  • Keyboard events가 가끔 빠르게 반복될 수 있음(버그)
  • 모든 key 입력이 원격 데스크탑이나 가상 머신에 전달되지 않을 수 있음(버그) 
그리고, Wayland에 관심이 있다면 위의 Fedora 링크를 자세히 숙지해야 할 것이다. 실제로 일반 사용자들은 자신이 로그인한 데스크탑 환경이 Wayland 환경인지 Xorg  환경인지 헛갈릴 수 있고, Wayland 환경 내에서도 실행시킨 GUI 앱이 Wayland 앱인지 Xorg 앱인지 구분하기 어렵다.

Wayland + Nvidia 상용 드라이버 환경

실제로 우분투 17.10에 탑재된 Nvidia 상용 드라이버를 설치하고 재부팅해서 무심코 로그인하면 기존에 Wayland + nouveau 환경을 사용했던 일반 사용자들은 당연히 Wayland + Nvidia 환경이 됐을 거라 착각하기 쉽다. 하지만 logout 한 후에 기어를 click해 보면 "Ubuntu" 세션이 사라지고 "Ubuntu on Xorg" 세션만 남아 있음을 알게 된다. 기본적으로 Nvidia 상용 드라이버 환경에서 별다른 설정을 하지 않으면 Wayland를 사용할 수 없다. 이 부분은 Nvidia 상용 드라이버의 한계라고 볼 수 있기도 하다. 아직 상용 드라이버들이 Wayland 를 제대로 지원하지는 않고 있다는 증거이다.

Nvidia 상용 드라이버 환경에서 Wayland를 사용하려면 앞서 글에서 다룬 바와 같이 nvidia-drm 모듈에 대한 option을 주고 부팅해야 한다. 앞서 글에서 다룬 Nvidia 드라이버 설치 방법을 숙지하는 것이 좋다. 참고로, 우분투 17.10에 탑재된 Nvidia 상용 드라이버는 Nvidia Site에서 제공하는 최신 상용 드라이버와 버전은 같지만 내 PC에서는 option을 주어도 Wayland를 사용할 수 없었다.

Wayland + Nvidia 환경은 일반 사용자들에게 권하고 싶지 않다. 기본적으로는 안정성 문제가 심각하고 Grub Recovery 모드로 부팅시 화면이 깨져서 아무것도 할 수 없는 문제가 생긴다.

안정성 문제는, 가령 절전 모드 진입시에 Gnome Shell이 먹통이 되어 버리는데 ssh로 원격 접속하는 것 말고는 할 수 있는 게 없다. 기본적으로 콘솔은 black screen이기 때문이다. 더구나 Wayland 환경에서는 gdm 서비스를 종료시켜서 콘솔 화면으로 빠져 나올 수 있는 방법도 없다.

그러니까, Nvidia 상용 드라이버 환경에서 Wayland 를 사용하고 싶다면 반드시 사전에 openssh-server를 설치해 두어야 한다. 물론 ssh로 접속할 수 있는 별개의 PC 한대가 더 있어야겠다. 스마트 폰 앱으로도 가능하긴 하지만 불편하니까...

참고로 ssh로 원격 접속해서 Nvidia 환경에서 Xorg로만 다시 사용하기 위해서는 blacklist 파일에 아래와 같이 option을 변경하고 initramfs를 update 한 후 재부팅하면 된다.

options nvidia-drm modeset=0

또는, 아예 상용 Nvidia 드라이버를 제거하고 nouveau 드라이버 환경으로 복귀하면 최초의 우분투 환경으로 돌아올 수 있다.

Xorg 환경

Xorg 환경은 Wayland에 관심이 없거나 잘 모르는 사용자들이 익숙한 환경이다. Unity Desktop이 Gnome Desktop으로 바뀐 것 빼고는 달라진게 없다. Xorg 환경에서는 nouveau 건 상용 Nvidia 드라이버 건 모두 안정적으로 동작하기 때문에, 역설적으로 기존의 우분투 사용자들이 당분간 선호하게 될 환경이기도 하다.

한글 입력기 문제

Gnome Desktop의 기본 한글 입력기는 ibus이다. 우분투 17.10을 설치하고 나서 한글 언어 팩을 자동 설치하고 나서 재로그인 하면 한글입력이 바로 되면 좋은데 재부팅하고 나서야 제대로 동작하더라. 

참고로, fcitx-hangul은 따로 설치해야 하는데, 설치 후 언어 설정에서 입력기를 fcitx로 지정해도 재로그인 후 fcitx 프로세스가 뜨지 않는 문제가 있다. fcitx 프로세스가 동작하려면 입력기 환경변수 들이 ibus 대신 fcitx로 바뀌어야 하는데 자동으로 바뀌지 않는 버그가 있다. 또한, im-config를 실행해도 환경 변수들이 제대로 설정되지 않는 버그도 있다. 내부적으로 im-config를 사용하고 있다면 동일한 버그일 수도 있다. 이에 더해서, 수동으로 입력기 환경변수를 fcitx로 잡아주면 fcitx 프로세스가 뜨지만 ibus 프로세스들 역시 죽지 않아서 fcitx가 제대로 동작하지 않는다. 

사실, Wayland 테스트 하느라 한글 입력기들은 제대로 테스트하지 못했다. ibus를 사용하면 Qt 앱에서도 한글입력이 잘 된다. 당분간은 ibus에 만족해야 할 듯...

맺음말

우분투 17.10에 Gnome Shell 뿐만 아니라 Wayland 서버가 기본 데스크탑이 되면서 우분투 사용 환경이 다소 복잡해진 것이 사실이다. Gnome은 이제 붙박이가 되었으니 그렇다 쳐도, Wayland냐 Xorg냐의 선택과 nouveau냐 Nvidia 상용 드라이버냐의 선택이 있으므로 최소한 4가지 사용 환경이 파생된다. 여기에 기존의 Unity 사용자들은 Gnome 대신 Unity를 계속 사용할 수도 있으니...

굳이 Nvidia  상용 드라이버를 쓸 필요가 없는 일반 사용자 들은 기본 우분투 환경인 Gnome + Wayland + nouveau도 꽤 쓸만하다고 본다. 하지만, CUDA 등 Nvidia 상용 드라이버를 반드시 사용해야 하는 사용자라면 당분간 Gnome + Xorg + Nvidia 환경을 사용해야 할 것이다.

2015/05/24

Ubuntu 15.04 systemd 부팅 시간 줄이기


systemd 매번 부팅시마다 fsck 검사하는 문제

우분투 15.04부터 본격적으로 systemd를 채택했으니 여기에 적응할 필요가 생겼다. 기본적으로 매번 부팅할 때마다 fsck가 파티션 별로 file system check를 하다보니 10초 정도를 허비하고 있다는 것을 알았기 때문이다. Ctrl-C로 취소할 수 있다고 메시지가 뜨지만 실제로 Ctrl-C도 동작하지 않는다. 이 두 가지 문제 중에서 첫번째만 해결되면 Ctrl-C가 동작하지 않아도 큰 문제는 없다.

systemd에서는 부팅 후 터미널에서 아래의 명령으로 부팅 시 소요 시간과 서비스(systemd unit service)별 병목 구간을 알 수 있다.

$ systemd-analyze
$ systemd-analyze blame
$ systemd-analyze critical-chain

예전에 fsck 주기를 mount 횟수나 일정 시간 간격으로 설정할 수 있었던 기억이나서 tune2fs를 가지고 별짓을 다 해 보아도 부팅시 fsck가 파일시스템 검사하는 것을 막을 방법이 없었다. 구글링으로 찾은 방법은 /etc/fstab 파일에서 <Pass> 파라미터를 0으로 바꿔주면 해당 파티션은 fsck 검사를 하지 않는다는 것이다. 모든 파티션에 대해 파라미터를 0으로 수정하고 재부팅하니, 과연 10초 정도 부팅속도가 빨라졌다. 뭐 이 방법도 나쁜 방법은 아니지만, fsck를 고생해서 쓰라고 우분투에 넣었는데 안쓰는 것도 좀 미안한 생각도 들고, 왠지 가끔씩은 돌려야 할 것 같아서 더 좋은 방법을 찾아 보기로 했다.

e2fsck time-stamp 문제

우분투 관련 사이트에는 systemd 사용역사가 짧아서인지 문제점을 지적한 글을 찾을 수 없다. 역시, systemd를 처음 채택한 Fedora 관련 사이트에서 이 두가지 문제에 대한 글들을 찾을 수 있었다. fsck 버그란 얘기도 있고 fsck time-stamp 때문이란 얘기도 있다. 실제로 아래의 명령으로 fsck time-stamp 문제가 발생하는 것을 확인할 수 있었다.

$ journalctl | grep -i fsck
May 23 17:20:10 localhost.localdomain systemd-fsck[278]: ROOTFS: Superblock last write time is in the future.
May 23 17:20:10 localhost.localdomain systemd-fsck[278]: (by less than a day, probably due to the hardware clock being incorrectly set). FIXED.
또, 아래 명령으로 리눅스 ext 파티션의 mount와 최종 fsck 시간을 확인할 수 있는데 UTC time으로 로그가 찍힌다.

$ sudo tune2fs -l /dev/sda8

가만히 생각해 보니, Windows와 Ubuntu의 시간을 맞추기 위해 /etc/default/rcS 파일에서 UTC=yes 설정을 UTC=no로 바꾸었다는 것을 깨닫게 됐다. 이 설정은 컴퓨터 내장 시계의 시간 기준이 UTC인지 local time인지를 부팅시에 알려 준다. 추정컨대, H/W clock이 local time으로 설정되어 있어서 fsck 검사시에 local time으로 최종 시간을 파일시스템에 저장했는데 다시 fsck 검사할 때는 이것이 UTC time이라고 생각하기 때문에 발생하는 문제인 듯 싶다. 즉, 우리나라 local time인 KST = GMT+09로 UTC 시간 보다 9시간이 빠르다. 참고로, 시간 설정에 대한 정보는 아래의 명령으로 확인할 수 있다.

$ timedatectl status
$ sudo hwclock --show

문제 해결?

아무튼 /etc/default/rcS 파일을 원래대로 UTC=yes로 저장하고 재부팅했더니 파일시스템 검사 시간이 줄어 들었다. 검사 시간이 줄어드는 정도로는 안되고 아예 검사를 하지 말아야 한다. journalctl 명령으로 확인해 보니, EFI System Partition(ESP)에 대해서만 fsck가 파일시스템 검사를 했음을 알 수 있었다. ESP는 vfat 파일시스템이므로 fsck 검사시간 정보 등을 저장할 수 없다. 예외적으로 이 놈에 대해서만 /etc/fstab의 <Pass> 파라미터를 0으로 설정하기로 하였다. 이 후로 몇번 재부팅해봤는데 더이상 fsck가 돌지 않아서 부팅시간이 10초 정도 빨라졌다.

vfat 빼고는 생기지도 않았을 문제를 해결했다니 느낌이 좀 이상하네...

systemd 부팅 시간 쬐금 더 줄이기

systemd에서는 서비스들을 unit 단위로 관리한다. unit 간에 의존성이 있을 수도 있다. 일단 아래의 명령으로 현재 서비스 unit과 상태를 확인할 수 있다. 상태는 enabled, static, disabled, masked의 4가지가 있을 수 있는데, static은 다른 unit과 의존 관계가 있다고 이해하면 될 듯하다. masked는 disable 시킨건 아니지만 의존 관계를 유지하면서 해당 unit만 disable 시키는 방법인 듯하다. 물론, 부팅 후 특정 서비스 unit을 stop하거나 start 할 수도 있다.

$ systemctl list-units --type service
$ systemctl list-unit-files --type service

그리고, systemd 서비스 unit을 부팅시에 동작하지 않도록 하거나, 다시 동작하도록 하려면 아래의 명령을 사용하면 된다.

$ sudo systemctl disable <unit 명>
$ sudo systemctl enable <unit 명>

앞서 systemd-analyze blame 명령에서 서비스 unit 별로 실행시간 profile을 알 수 있는데 시간이 오래 걸리는 놈들 중 불필요한 서비스 unit을 disable 시키면 된다. 아래 두 놈을 시범삼아 제거해 보았다. 참고로, fsck의 경우도 systemd-fsck@.service를 disable 시킬 수도 있지만 다른 unit와 의존관계가 있었고 아래 두 놈은 의존관계가 없어 보였다.

$ sudo systemctl disable ModemManager.service
$ sudo systemctl disable bluetooth.service

결론

위의 두 놈을 제거후 재부팅했더니 5초 정도 부팅시간이 빨라졌다. fsck까지 포함해서 15초를 절약하게 됐다. 그래서 총 부팅시간이 35초에서 20초 정도로 줄었다는 것이 결론이다. 뭔가 허무한 느낌... 더구나 애초에 /etc/default/rcS 파일을 건드리지 않았으면 fsck에 대한 10초도 빨라진게 아니라는... ㅠ.ㅠ

참고 사항

위에서 우분투 H/W 시간 기준을 UTC로 바꾸고 Windows로 부팅하면 Windows에서는 그 시간을 local time이라고 해석하기 때문에 시간이 UTC time으로 바뀌어 9시간 느린 시간이 표시될 수 있다. 특히, NTP time 서버와 동기화 되지 않을 때 이 문제가 생기는데 Windows Scheduler에서 NTP 서버 동기화 작업을 걸어 주거나, Windows에서도 H/W 시계의 시간 기준이 UTC라고 알려 주는 방법도 있단다. Mac OS X의 경우에는 Unix 계열이므로 리눅스와 마찬가지로 timezone으로 시간을 설정하므로 시간 불일치 문제는 발생하지 않는다.

2015/05/06

Qt 5.4 fcitx immodule Build 및 한글 사용


이전 글에서 우분투 15.04 Unity Desktop 환경에서 한글 입력기로 fcitx를 추전했는데, 막상 Qt 5.4의 Qt creator에서는 한영키가 동작하지 않아 황당했다. 당연히, 이 Qt creator로 build한 Qt 5.4 애플리케이션에서도 한영키가 동작할리 없다. 이전 글에서 테스트한 Qt 앱은 Qt 5.3에서 build 했던것 같다. 한마디로 우분투 패키지로 다운 받은 fcitx는 최신 버전의 Qt 5.4를 지원하지 않는 것 같다. 뭔가 달라진 듯...

구글링하니까 마침 일본 블로그에 fcitx build하는 방법이 올라와 있어서 다시 build 한 후 Qt5 immodule를 복사해 넣었더니 모든 Qt 애플리케이션에서 한글입력이 잘 된다. 다만, 그 블로그 내용을 그대로 따라하니까 안되더라... 그래서 다시 정리한다.

Qt 5.4에서 fcitx Qt5 immodule build

$ sudo apt-get install git cmake

$ git clone https://github.com/fcitx/fcitx-qt5.git
$ cd fcitx-qt5
$ git checkout 0.1.3

build 하기 전에 Qt 5.4가 설치된 홈 폴더를 미리 알아 두어야 한다. 나의 PC에는 /opt/OpenSrc/Qt에 설치하였다.

$ cmake . -DCMAKE_PREFIX_PATH=/opt/OpenSrc/Qt/5.4/gcc_64
$ make

기존 fcitx 패키지로 설치된 Qt5 immodule 대체 설치

기존의 우분투 fcitx 패키지에 딸려온 Qt5 immodule을 대체해버리는 것이 가장 좋은 설치 방법이다. 안전을 위해 원래 파일은 org.libfcitxplatforminputcontextplugin.so로 백업했다.

$ sudo mv /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/org.libfcitxplatforminputcontextplugin.so

$ sudo cp ./src/libfcitxplatforminputcontextplugin.so /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/

또 한가지 대체해야 할 파일이 있다는 것을 나중에 알았다. Qt5 immodule이 사용하는 runtime library 파일 하나가 같이 build 되었다. 이 놈까지 버전이 일치해야 한다.

$ sudo mv /usr/lib/x86_64-linux-gnu/libfcitx-qt.so.0.1 /usr/lib/x86_64-linux-gnu/org.libfcitx-qt.so.0.1

$ sudo cp ./fcitx-qt5/libfcitx-qt5.so.0.1 /usr/lib/x86_64-linux-gnu/libfcitx-qt.so.0.1

참고 사항

참조한 일본 블로그에는 환경 변수 설정 같은 것들이 있다. 그렇지만 .bashrc에 입력기 환경변수를 넣으면 X-Window의 실행 순서 때문에 환경변수가 제대로 동작하지 않을 수도 있다. 편하고도 안전한 방법은 먼저 fcitx 패키지를 설치하는 것이다. 이 글은 fcitx 패키지가 먼저 설치된 것을 전제로 했다.

일본 블로그에서 설명하듯이 기존 파일들을 대체하지 않고도 새로 build한 Qt5 immodule을 사용할 수도 있는데 runtime library가 두 개라 환경 설정을 제대로 해주어야 한다(기존 패키지와의 충돌때문에 설정이 다소 복잡하므로 세부 설명은 안한다). 다만, Qt5 immodule을 복사해야 할 폴더는 /opt/OpenSrc/Qt/5.4/gcc_64/plugins/platforminputcontexts가 아니고, /opt/OpenSrc/Qt/Tools/QtCreator/bin/plugins/platforminputcontexts이더라. 뭐, 두 곳에 다 복사해도 상관은 없다.

2015/05/05

우분투 15.04 fcitx-hangul 설치 및 설정


우분투 15.04에서 기본 입력기인 ibus가 큰 문제가 있는 건 아니지만, 최근에 Qt5를 배우면서 Qt5 입력기 모듈을 제공하는 fcitx를 설치해 보기로 했다. ibus나 uim 입력기는 Qt5 애플리케이션에서 한글 입력시 띄어쓰기 등의 문제가 발생한다. ibus의 경우 이 문제에 대해 버그 리포팅 한지 1년이 다 돼가는데 Qt5.5 이후에나 사용할 수 있을 듯 하다.

참고로, ibus나 fcitx 주 개발자는 중국인이고 uim은 일본인이다. ibus-hangul과 nabi 개발자는 한국 사람인데 그가 만든 libhangul을 fcitx-hangul 입력기에서 사용하고 있다. 그래서 그런지 몰라도 ibus-hangul에서 발생하는 마지막 입력글자가 마우스 이동시 따라 다니는 문제는 fcitx-hangul에서도 발생한다. uim-byeoru를 만든이도 또 다른 한국인인듯 하다. 한글 입력기의 문제는 한국 개발자들이 주개발자가 아니고 한글 입력기 모듈만을 만든는데서 비롯되는 것인지도 모른다. 워낙에 개발자 저변이 열악하다 보니 한번 만들면 유지보수나 사용자 지원이 잘 이루어지지 않고 있는 것이 현실이다.

fcitx를 설치 후 사용해 본 바로는 현재까지의 입력기들 중에선 우분투 유니티 데스크탑 환경에서 가장 좋은 한글입력기라고 말하고 싶다. 기본적으로 유니티 상단 패널에서 한영 전환 상태를 구분할 수 있고, 한자 입력은 물론이고 virtual keyboard를 이용해서 일본어나 특수문자 입력도 가능하다. Qt5 입력 모듈이 기본 제공되고 있어 Qt5 애플리케이션에서도 한글입력이 잘 된다.


fcitx 설치

아래와 같이 fcitx-hangul 패키지만 설치하면 필요한 패키지들이 모두 설치된다.

$ sudo apt-get install fcitx-hangul

패키지 설치 후 기본 입력기인 ibus대신 아래 화면과 같이 [System Settings] > [Language Support]에서 [Keyboard input method system:]의 [fcitx]를 선택한 후, 다시 로그인해야 한다.


한글 키보드 추가 및 한영키 설정

재로그인 후, fcitx 설정 프로그램을 실행해야 한다. 유니티 패널 상단의 키보드를 클릭하여 Configure를 선택하거나, <Super> Key를 눌러서 유니티 대쉬에서 fcitx를 검색해서 나오는 [fcitx Configuration] 아이콘을 선택해서 기동해도 되고, 터미널에서 아래 명령으로 실행해도 된다.

$ fcitx-config-gtk3

먼저, 아래 화면과 같이 [Input Method] 탭 하단 왼쪽의 [+] 버튼을 눌러 Hangul 키보드를 검색한 후 선택하여 추가해 준다. 참고로, 내 경우엔 우분투 기본언어를 영어로 사용하고 있어서, 한글을 기본 언어로 사용하는 경우에는 반대로 Keyboard-English(US)를 추가해야 할지도 모르겠다. 그리고, 두개의 키보드가 추가된 상태에서 위에 있는 키보드가 기본 키보드가 된다. 즉, Hanul 키보드가 위에 있도록 순서를 조정하면 터미널 등의 애플리케이션 실행 후 한글 입력 상태가 된다.


참고로, 이렇게 추가된 키보드는 [System Settings] > [Text Entry]에서도 확인할 수 있는데 한글 키보드는 Hangul (Fcitx)로 표시된다.

이제, 한영전환키로 한영키만 설정해 주면 된다. 아래 화면과 같이 [Global Config] 탭에서 [Trigger Input Method]에 [Ctrl+Space]와 [Empty]로 표시되어 있는 버튼을 각각 눌러서 [한/영]키와 [Shift+Space]키로 바꿔주면 된다.


추가 설정

위의 과정까지만 해 주어도 fcitx를 입력기로 쓰는데 큰 지장은 없는데, 아래 화면과 같이 한글로 전환시 [Hangul]이라고 표시되는 작은 창이 뜨는게 좀 귀찮아서 없애기로 하였다.


위의 화면에 없애는 방법도 같이 보여주고 있는데, gedit로 ~/.config/fcitx/config 파일을 열어서 "ShowInputWindowAfterTriggering=False" 부분을 설정해서 저장한 후,

$ gedit ~/.config/fcitx/config

아래 명령으로 fcitx를 재기동 해주면 된다.

$ fcitx -r

Virtual Keyboard 사용

맨 위의 스크린 샷에 보이는 virtual keyboad를 사용하려면 유니티 상단 패널의 키보드나 태극문양 아이콘을 클릭해서 [Toggle Virtual Keyboard]를 선택하면 키보드가 나타나고, 한번더 선택하면 사라진다. 마우스로 Virtual Keyboard의 [Latin] 부분을 선택하면 번갈아 가면서 일본어 등 다른 키보드들을 선택할 수 있다. 또한, 마우스로 특수문자를 입력해도 되고 해당 키보드가 선택된 상태에서 실제 키보드를 입력해도 해당 키의 특수문자가 입력된다.

fcitx 자잘한 문제들

앞서 언급했던 ibus-hangul과 동일한 한글 마지막 입력글자가 마우스 따라다니는 문제 외에, 우분투 VirtualBox 게스트에서 영문 모드 상태의 유니티 Dash에서 한영키가 동작하지 않아 한글이 입력되지 않는 문제가 있었다. 우분투 호스트에서는 그런 문제는 안생기고 있다. 또, 한가지는 ibus-hangul에서도 발생하는 문제인데, 영문모드 상태에서 구글 chrome 브라우저를 실행하자마자 주소창에서 한영키를 누를 경우 한영전환이 안되는 문제가 있다. 주소창이 아닌 검색창에서 한영키를 누르면 한영전환이 잘 된다.

추가적으로, 다시 ibus를 사용하고자 할 경우 [System Settings] > [Language Support]에서  [fcitx] 대신 [ibus]를 선택하고 재로그인 해 주면 되는데, 한영키를 사용하려면 Hangul (ibus) 키보드를 다시 추가해 주어야 한다. 이때 불필요한 fcitx 프로세스 하나가 같이 살아있는 문제도 있다.

2015/04/25

Ubuntu 15.04 적극 추천


어제 글(어제 밤에 12시를 넘기는 바람에 날짜는 이 글과 동일함)에서 우분투 15.04를 권장하지 않는 분위기로 글을 올렸는데 VirtualBox가 아니고 iMac에 설치해서 잠깐 사용해 본 결과 우분투 15.04를 적극 추천하지 않을 수 없게 입장이 바뀌었기에 이 글을 별도로 작성한다. 적어도 Intel-Mac 사용자들에게는 강력 추천하고 싶다. 기능이 추가된 것보다는 안정성이 상당히 강화된 것에 높은 점수를 주고 싶다. 우분투 14.04 LTS 보다 더 안정된 느낌이다.

원래는 VirtualBox에만 설치하고 메인 머신은 우분투 14.10으로 1년 정도 더 버텨볼 생각이었다. 그런데, 가상머신 환경이라 느려서 그렇지 뭔가 상당히 안정된 느낌을 주었기에 메인 머신에서 테스트해 봐야겠다는 생각이 들어서 15.04로 하드디스크의 우분투 설치 iso를 이용하여 Clean Install 하였다.

 Nvidia 드라이버 안정성

우선, Nvidia 드라이버가 상당히 안정화 되었다. Nouveau 드라이버도 상당히 개선된 것 같고, 우분투 15.04에서 기본으로 제공하는 Nvidia proprietary driver도 346.59 버전으로 거의 최신 버전이다.

일단 14.10버전까지 오픈 소스 Nouveau 드라이버는 Qt Creator에서 QML 등 OpenGL을 사용하는 애플리케이션에서 화면 잔상이 생겨서 거의 사용할 수 없었는데 깔끔하게 동작한다. 다만,  Virtual Box 우분투 guest 머신에서 3D 가속을 사용할 경우 시스템이 죽는 문제가 발생했다. 이는 이전 버전에서도 흔히 생겼던 문제이고 우분투 문제라기 보다는 Virtual Box 문제인 경우가 많았다. Windows guest는 그럭저럭 잘 돌아간다. 3D 가속만 끄고 사용하면 우분투 게스트도 좀 느리긴 하지만 별 문제는 없다.

우분투 14.10까지는 Nvidia proprietary 드라이버를 Nvidia 홈페이지에서 다운 받아 사용해야 했다. 우분투에 기본 탑재된 드라이버를 사용할 경우 공포의 black screen 문제가 발생했었다. 이제는 기본 탑재된 드라이버를 사용하면 된다는 것이 특히, Intel-Mac 사용자들에게는 기쁜 일이다. 또 한가지 Mac 사용자들에게 반가운 점은 화면 밝기 조절을 매 부팅시마다 해 주었어야 했는데 밝기 변경 상태가 재부팅 후에도 잘 유지된다

System 안정성

우분투 14.10 사용시에는 부팅시마다 colord-sane 데몬 등 crash가 끊이질 않았는데 crash가 없어지니 뭔가로 부터 해방되어 편안한 느낌이 든다. 몇일 더 써 봐야 확실해지긴 하겠지만 우분투를 사용하면서 이렇게 안정된 느낌을 받아 본적이 없을 정도다.

우분투 14.10 설치 후 재부팅시 iMac에서 우분투로 부팅할 수 없었던 문제도 사라졌다. EFI 설정이 잘 보존된다. 다만, 우분투 15.04를 설치한 후 EFI Multi-OS 사용시 부팅 순서를 우분투가 1순위가 되도록 조정한다. 이것은 어쩌면 OS 입장에서 당연한 것인지도 모른다. 방금 설치한 OS로 부팅하도록 할 필요가 있기 때문에... 아무튼 부팅 순서는 우분투로 부팅하고 나서 이전 글의 efibootmgr 사용법을 참고하여 바꿔주면 그만이다.

WIFI 안정성

iMac에서는 우분투에 기본 탑재된 Broadcom proprietary driver를 사용하면 되는데 수동으로 설치해 주어야 하는 문제는 아직 남아있다. 몇일 더 써보아야 확인이 되긴 하겠지만 WIFI도 개선이 된듯하다. 무선공유기에 가끔씩 연결이 안되는 문제가 사라졌고 네트워크 속도도 상당히 빨라진 느낌이다. 오늘이 주말이라 그럴 수도 있기 때문에 좀더 지켜봐야 한다. 참고로, 유선 네트워크 드라이버를 언급하지 않는 이유는 예전부터 별 문제가 없었기 때문이다.


아직 하루도 안써 보고 안정성을 얘기하는 것이 때 이르긴 하지만 문제가 발생하면 이후에 다시 글을 수정할 생각이다.

Ubuntu 15.04 출시 잡담


어젯 밤에 우분투 홈페이지에 접속했는데 우분투 15.04 Vivid Vervet이 안걸려 있어서 오늘 오후에 봤더니 걸려 있더라. KAIST FTP는 미러링이 안되어 있었고 neowiz 사이트는 3~4시간... 너무 느려서 독일 미러링 사이트에서 우분투 설치 iso 이미지 파일을 다운 받았다. 의외로 WIFI 사용하는데 3분 정도 밖에 안걸려서 놀랬다.

우분투 15.04 새로운 점?

뭔가 새로운 것에 대한 기대감 때문에 빨리 설치해 보고 싶었는데 막상 Virtual Box에 설치해 보니 별 감흥이 없다. 뭐 늘 그렇듯이 리눅스는 겉모습이 많이 바뀌는 게 아니니까 큰 기대를 가지면 실망하게 된다. 커널이나 기본 소프트웨어 패키지들이 모두 업그레이드 되는데 바뀐게 없다고 하면 만든 사람들은 얼마나 실망이 클까? Mir나 Unity 8은 1년 후 16.04 LTS에서 기대해야 할 듯... 이번 버전 역시 14.10과 유사하게 가상화나 Cloud Computing 관련 서버 버전 Upgrade 내용이 많아 보인다.

우분투 15.04 데스크탑 버전에서 가장 크게 바뀐 것은 init 프로세스로 Upstart를 버리고 다른 리눅스 배포판과 마찬가지로 systemd를 완전히 채택했다는 점이다. 이 역시 겉으로 드러나지 않기 때문에 일반 데스크탑 사용자들은 달라진 것이 없다고 느낄 듯... 부팅 속도가 좀 빨라질거라는데 가상 머신이라 그런지 큰 차이는 못느끼겠다.

얼마 전에 나온 Kernel 4.0을 우분투 15.04에 넣으려고 했는데 일정상 넣지 못하고 3.19를 넣었단다. 커널 0.98일때 Slackware를 처음 접했던 것 같은데 4.0이라니 감회가 새롭다. 참고로 커널 4.0부터 Kernel live patching이 적용된단다. 리눅스가 Windows에 비해 항상 비교 우위에 있는 점이 커널이나 일부 디바이스 드라이버 설치시를 제외하고는 재부팅할 필요가 거의 없다는 것인데, 서버의 경우에는 이제 기계가 망가지지 않으면 재부팅할 일이 없어지는 것인지 두고 볼 일이다. 토발즈가 4.0보다 4.1에 새로운 기능이 더 추가될 것이라니 이번 우분투 버전으로 업그레이드하기를 권하고 싶지는 않다.


Unity에서 눈에 띄는 새로운 사소한 기능이 하나 있는데 Window title bar에 통합된 메뉴를 고정시킬 수도 있다는 점이다. 역시 리눅스 답게 설정할 수 있는 UI는 없으니 dconf-editor를 사용하거나 아래의 명령으로~!!!
$ gsettings set com.canonical.Unity always-show-menus true

설치 후 소감

Virtual Box에서 EFI 모드로 설치하면 부팅이 안되는 증상이 14.10부터 있었는데 해결되지 않아서 BIOS 모드로 재설치 해야 했다. 더구나 BIOS 모드로 btrfs 파일시스템으로 설치 후, 재부팅해서 잘 돌아가나 싶었는데 Virtual Box에서 창닫기 버튼으로 껐더니 btrfs 파일시스템이 맛이 가서 부팅이 안되고 있다. 이 글을 쓰고 있는 내내 부팅이 안되는 걸로 보아 ext4 파일 시스템으로 재설치해야 할 듯... 블로그에 스크린 샷 좀 넣어 볼랬더니... ㅠ.ㅠ... 또 재설치 후에...ㅠ.ㅠ... 아무튼 이래 가지고는 btrfs를 누구에게 권하겠나 싶다.


그리고, 14.10에서 ibus-gtk 패키지가 누락돼서  ibus-hangul 사용시 발생하던 한글 입력 문제들은 해결되었다. 다만, English로 우분투 설치시에는 이전 글을 참조하여 ibus설정을 해 주어야 한다.

2015/03/01

Ubuntu 14.10 fdisk와 gdisk


Ubuntu 14.10의 fdisk에서 GPT 파티션 지원 시작

우분투 14.10부터 fdisk에서 GPT 파티션도 지원하기 시작했다는 것을 우연히 발견했다. 당연히 fdisk는 DOS(MBR) 파티션에 사용하고 GPT 파티션 작업에는 gdisk(GPT fdisk라고도 함)를 사용해 왔기 때문이다. 아래에 새로운 fdisk와 gdisk 메뉴 스크린 샷을 첨부한다.


gdisk가 fdisk로 완전히 통합될지는 모르겠지만 아직은 gdisk에 너무 익숙해서 fdisk를 쓰고 싶은 마음이 생기지는 않는다. 여기서는 gdisk의 몇가지 팁들을 남겨두고자 한다.

gdisk를 이용한 파티션 테이블 정보 관리

아래 화면과 같이 GPT 파티션 Table 정보와 Protected MBR 파티션 정보를 gdisk로 관리할 수 있다. Multi-OS 환경에서 이 정보들은 잘 Backup 해둘 필요가 있다. Linux는 Gparted/parted, Windows는 Disk Manager/diskpart, Mac OS X는 Disk Utility와 같이 OS 별로 저마다의 Disk 관리 Tool 들이 있는데, 이 들이 디스크 파티션 변경시 저마다의 방법으로 파티션 Table 정보를 변경해 버리기 때문이다.


가령, Mac OS X의 Disk Utility로 Disk의 마지막 파티션을 미할당 상태로 남겨 두고 리눅스에서 Gparted로 fat32 파티션을 새로 할당하면 Protected MBR 파티션 정보가 Hybrid-MBR 파티션 정보로 바뀐다. 이 상태에서 Windows로 부팅하면 자동 복구 모드로 넘어 가는데 복구하면 파티션이 완전히 망가지는 경험을 하게된다. 한가지 경험담을 더 예로 들면, Windows에서 fat32 파티션을 지웠다가 다시 생성했더니 Mac OS X로 부팅할 수 없는 문제가 발생했다. 이런 일이 어느 날 갑자기 생기면 Mac OS X의 문제라고 생각하고 OS 재설치를 시도하게 된다. 그러나 재설치를 해도 재부팅 후 Mac OS X로 부팅할 수 없게 된다. Mac OS X의 Disk Utility로 verify 해 보면 파티션 오류가 발생하고 복구할 수는 없다. 나중에 알고보니 Mac OS X 파티션 Type 정보가 "Apple HFS/HFS+"였는데 "Microsoft basic data" Type으로 바뀌어서 발생한 문제였다.

gdisk는 파티션 테이블 원본을 Binary 파일로 Backup했다가 문제가 생겼을 때 복구하거나, 아니면 파티션 정보를 텍스트 파일로 저장했다가 나중에 수작업으로 파티션 정보를 일일이 복구할 수 있도록 해준다. 위의 경험담은 어쩌면 지극히 일부의 문제 사례일 것으로 추정된다. 즉, Multi-OS 환경에서 특정 OS의 디스크 관리 툴을 가지고 파티션 추가/삭제/변경 작업시 파티션 테이블의 어떤 정보가 동시에 변경될지 예측하기 어렵다. 특정 OS로 갑자기 부팅이 안되는 문제가 발생하면 gdisk로 파티션 테이블 변경 사항이 있는지를 가장 먼저 확인하는 것이 좋다. 파티션 테이블만 복구하면 대부분의 문제가 해결된다.

gdisk 활용 팁

파티션 Type이 변경된 경우, gdisk의 l(list known partition types) 명령으로 파티션 Type code를 알아낸 후 t(change a partition's type code) 명령으로 해당 파티션의 code를 변경해 주면 된다.

리눅스 GPT 파티션들은 Gparted로 파티션을 새로 만들면 파티션 Type code가 0700(Basic data partition)이 된다. 이 파티션은 Windows로 부팅시 탐색기에서 새로운 드라이브로 보이는데 마우스로 클릭하면 포맷할지 물어본다. 이 자체가 사용자의 실수를 유발할 수 있기 때문에 Windows에서 리눅스 파티션이 아예 보이지 않도록 해 줄 필요가 있다. gdisk에서 Type code를 8300(Linux filesystem)으로 바꿔주면 Windows 탐색기에 더이상 리눅스 파티션이 보이지 않게 된다.

순수 UEFI-GPT Multi-OS 환경에서는 Protected MBR 파티션은 디스크 전체가 하나의 파티션으로 잡혀야 하는데 Hybrid-MBR 파티션 정보로 바뀌면 여러 개의 파티션이 나타나게 된다. 이 때는 gdisk의 x(Expert command), n(create new protective MBR) 명령으로 새로 파티션을 생성해 주면 문제가 해결된다.

참고 사항

Hybrid-MBR 파티션은 Mac OS X의 Boot Camp를 사용해서 Windows를 설치할 때 BIOS 모드를 emulation 해 주기 위해서 사용하는 파티션 방식이다. 즉, Mac OS X 자체는 GPT 파티션을 사용하는데 Windows의 DOS(MBR) 파티션을 지원하기 위해서 짬뽕 파티션을 사용하는 것이다. 그런데, 리눅스의 Gparted도 이 방식을 지원하듯하다. 문제는 이것을 모르고 사용하면 Multi-OS 환경에서 파티션 정보가 엉켜서 특정 OS로 부팅이 안되는 사태가 발생한다는 것이다.


2015/02/28

디스크 두개 사용시 Grub UEFI Booting 설정


두 개 이상의 물리적 디스크와 Multi-OS 환경

하드디스크 용량이 늘어나면서 HDD(Hard Disk Drive)가 하나인 PC들이 주가 되었었는데, SSD(Solid-State Drive)가 범용화 되면서 SSD와 HDD가 동시에 탑재된 PC 사용자들도 늘어나고 있다. 자연스럽게 디스크 성능과 용량이 증가하니까 Multi-OS를 사용하려는 시도가 생기기 마련이다. 대표적으로, UEFI 모드로 Windows 8+이 SSD에 설치된 PC를 구매했는데 우분투를 같이 설치해서 사용하고자 하는 시도가 있을 수 있겠다.

여기서는 SSD와 HDD이든, 또는 HDD가 두 개이든, 물리적으로 분리된 두개의 디스크를 장착한 최근의 UEFI 모드를 사용하는 PC 환경에서 다중 OS를 사용하기 위한 Grub 설정 방법에 대해서 정리한다.

UEFI 환경에서 우분투 설치시 고려할 점

Windows 8+가 첫번째 디스크에 설치되어 있다고 가정할 때 우분투를 두 번째 디스크에 설치하는 것은 그리 어려운 일이 아니다. 우분투 설치 iso를 USB에 굽던지 USB에 저장해서 일반적인 설치 과정을 따라가면 된다. 디스크만 두번째 디스크로 지정하면 된다.

다만, 파티션은 첫번째는 EFI System 파티션(ESP; 200~300MB), 그 다음은 우분투 OS root(/) 파티션(30~50GB), Swap 파티션(RAM과 동일 용량), 사용자 데이터(/home) 파티션(나머지 용량 - 용량이 클 경우 파티션을 몇개로 더 쪼개는 것도 괜찮음) 등의 최소한 4개의 파티션을 사용하는 것이 좋다.

UEFI 모드에서는 GPT 파티션을 사용하는데 기본적으로 128개까지 파티션을 사용할 수 있는 장점이 있기 때문에 파티션을 여러 개로 쪼개서 사용하는 것이 디스크 활용 측면에서 바람직할 수 있다.

여기서, 강조하고 싶은 점은 물리적으로 분리된 디스크 마다 첫번째 파티션은 ESP(EFI System Partition)로 설정해 두는 것이 좋겠다는 것이다. 사실은 ESP는 여러 OS가 공유해서 사용하는 파티션이기 때문에 디스크가 여러 개라고 하더라도 Boot Disk의 ESP 파티션 하나 만을 사용해도 된다. 다만, 디스크마다 ESP 파티션을 두라는 것은 혹시라도 디스크를 다른 PC에 장착할 가능성이 있고 파티션 용량도 얼마 안되기에 나중을 위해서 만들어 두라는 얘기다.

Boot Disk

예전의 IDE Controller 사용시에는 HDD를 두 개이상 사용하려면 Master/Slave 점퍼를 설정해야 했던 적도 있었다. SATA Controller로 넘어 오면서 부터 Master/Slave 구분은 의미가 없게 되었다. BIOS(또는 UEFI Firmware) 설정에서 Boot Disk로 설정한 디스크가 예전의 Master Disk에 해당된다.

가령, Windows가 SSD에 설치되어 있었고 나중에 우분투를 HDD에 설치했더라도 BIOS 설정에서 우분투 HDD로 먼저 부팅하도록 설정했다면 우분투 HDD가 Boot Disk가 된다. 즉, 리눅스에서는 부팅한 첫번째 디스크는 항상 /dev/sda가 되고 두번째 디스크는 /dev/sdb가 된다. Windows에서도 마찬가지로 부팅한 디스크/파티션이 C: 드라이브가 된다. 결국은 어떤 디스크로 부팅하느냐에 따라 디스크가 첫번째냐 두번째냐라는 것이 상대적으로 결정된다는 뜻이다.

Boot Partition

UEFI-GPT 방식에서는 Boot Disk의 ESP 파티션이 Boot Partition이다. 이와는 달리, BIOS-MBR 방식에서는 Boot Disk의 첫번째 sector가 MBR이 저장된 Boot Sector가 되고, 첫번째 파티션이 Boot Partiton이다(단, Linux의 Grub은 첫번째가 아닌 파티션을 Boot Partition으로 지정하여 사용할 수 있음).

참고로, 리눅스의 gparted로 GPT 파티션을 만들면 MBR과의 호환성을 유지하기 위해 디스크의 앞부분 몇 sector를 조금 남겨두고 첫번째 파티션을 만든다. Grub은 BIOS-GPT 방식으로도 동작하는데 Boot Sector 공간이 작기 때문에 이 경우에는 BIOS grub 파티션이라는 1MB 정도의 파티션을 별개로 만들어야 한다.

Windows UEFI Boot Partition

UEFI 모드로 설치된 Windows의 Boot Partition은 당연히 ESP를 사용하고 이 파티션은 나중에 설치한 우분투에서도 ESP로 사용할 수 있다. 그런데, Windows의 경우 GPT 파티션 구조가 여러가지 변형이 있을 수 있다.

즉, PC Vendor들이 제공하는 Recovery Partiton, Windows에서 자체 복구 목적으로 사용하는 Winows Reserved Partion, ESP 등의 3개 파티션이 Windows OS 파티션과는 별개로 존재할 수 있다. GPT 파티션에서 파티션들은 동등하고 GUID로 파티션 Type을 구분하기 때문에 ESP가 반드시 첫번째 파티션일 필요는 없다.

그렇지만, 나중에 Grub에서 Windows가 설치된 디스크의 ESP 파티션 정보를 사용할 것이기 때문에 ESP 파티션이 몇번째 파티션인지 조사해 보아야 한다. 우분투에서 Windows 디스크의 1~3번째 파티션 각각을 하나씩 마운트해서 폴더 구조를 살펴 보는게 가장 확실한 방법이다. 우분투로 부팅했으니 Windows 디스크는 /dev/sdb가 된다. parted를 사용하면 파티션 정보를 알 수 있다.

$ sudo parted /dev/sdb print
$ sudo mount /dev/sdb1 /mnt
$ ls  /mnt/EFI/Microsoft/Boot/bootmgfw.efi

위의 ls 명령 결과 botmgfw.efi 파일이 있으면 첫번째 파티션(/dev/sdb1)이 ESP이다.

Ubuntu UEFI Boot Partition

앞서 UEFI-GPT 방식에서는 물리적으로 분리된 디스크의 첫번째 파티션을 ESP로 만들어 두는 것이 좋다고 했고 우분투 설치시에 파티셔닝을 앞서 설명한 바와 같이 했다면 우분투가 사용하는 ESP는 Windows의 ESP와 다른 디스크의 파티션임을 이해할 것이다.

만약, BIOS 설정에서 Windows 디스크로 부팅하도록 설정했다면 Grub을 Windows의 ESP 파티션에 설치해야 한다. 하지만, 여기서는 우분투의 ESP에 Grub을 설치했기 때문에 BIOS 설정에서 우분투 디스크로 부팅하도록 해야 한다.

이제, 우분투 디스크의 ESP 파티션에 설치된 Grub을 이용해서 물리적으로 분리된 Windows 디스크의 Windows boot manager를 구동할 수 있도록 Grub boot menuentry를 만들 것이다. Grub에서 우분투 부팅 설정은 우분투 설치시에 자동으로 등록되기에 신경쓸 필요도 없다.

Grub Windows UEFI Boot Menu

앞서 Winodws의 ESP 파티션 위치를 bootmgfw.efi 파일 위치로 알아낼 수 있다고 했다. 아래 두개의 명령으로 Grub 메뉴엔트리에 사용할 <hints_string>과 <fs_uuid> 정보를 얻는다.

$ sudo grub-probe --target=hints_string /mnt/EFI/Microsoft/Boot/bootmgfw.efi
--hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1
$ sudo grub-probe --target=fs_uuid /mnt/EFI/Microsoft/Boot/bootmgfw.efi
ffff-ffff
이들 두 명령 결과 값들은 Grub 메뉴엔트리에서 아래와 같이 사용된다.
search --fs-uuid --set=root <hints_string> <fs_uuid>
즉, 위의 결과 값들을 사용하여 아래와 같이 Grub menuentry를 만든다.
menuentry "Microsoft Windows Vista/7/8+ UEFI-GPT" {
  insmod part_gpt
  insmod fat
  insmod search_fs_uuid
  insmod chain
  search --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1 ffff-ffff
  drivemap -s hd0 hd1
  chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
위에서 drivemap은 Windows가 반드시 물리적으로 첫번째 디스크여야만 부팅할 수 있는데 두번째 디스크로 인식하여 부팅할 수 없는 경우에만 사용한다. drivemap을 사용하지 않아도 되는 경우라면 굳이 사용할 필요는 없다.

위의 Grub 메뉴엔트리는 아래와 같이 편집기를 사용하여 /etc/grub.d/40_custom 파일 맨 끝에 삽입하면 된다.

$ sudo nano /etc/grub.d/40_custom

$ sudo update-grub
$ sudo reboot

재 부팅 후 위에 새로 만든 Windows Grub 메뉴를 선택해서 부팅이 잘 되는지 확인해 본다.

UEFI 환경에서 Grub을 이용한 다중 디스크의 Multi-OS Booting

UEFI 환경에서 디스크가 두개 이상인 경우 디스크 별로 서로 다른 OS를 설치해서 사용하면 관리 측면에서 편리하다. 이 경우, 각 디스크 별로 ESP 파티션을 따로 만들어 두는 게 좋고, Grub을 사용할 경우 chainloader를 이용하여 다양한 조합의 부팅 설정이 가능하다. 각각의 ESP 마다 Grub을 설치해서 Grub 자체를 Chainloading 할 수도 있다.

이 글은 두 번째 디스크의 Windows boot manager를 Grub에서 Chainloading 하는 방법에 대해 예를 들었다.

참고 사이트

https://wiki.archlinux.org/index.php/GRUB

2015/02/20

Ubuntu 14.10 Unity Process 이슈


Unity Desktop Freeze 재발

설 전날인 2/18일자 우분투 14.10 daily update가 있었는데 xserver-xorg-core 패키지가 포함되어 있었다. 혹시나 했더니 역시나 이전 글에서와 동일하게 Unity Desktop으로 로그인 후 배경화면만 보이고 Unity가 먹통이 되는 증상이 다시 발생했다. 복구는 이전 글에서 언급했듯이 사용자 dconf database 파일을 삭제해 주고 재로그인하면 된다.

$ rm -f ~/.config/dconf/user

우분투 14.10 Unity process 죽는 문제

문제는 Unity Desktop 환경설정이 Ubuntu 최조 설치시점으로 돌아가 버리기 때문에 Desktop 환경 설정을 모두 다시 해 주어야 한다는 것이다. xserver-xorg-core 패키지가 update 될때마다 Desktop 환경설정을 다시 해 주어야 하므로 심각한 버그가 아닐 수 없다. ~/.xsession-errors 파일을 확인한 바로는 Unity process가 모두 죽어 버리기 때문에 발생하는 문제인 듯하다. 이 문제는 PC 환경이 다르긴 하지만 우분투 14.04 버전에서는 발생하지 않았다. 추측컨대 우분투 14.10에서만 발생하는 문제인듯하다.

물론, NVIDIA proprietary 사용자인 경우 OpenGL 라이브러리 update 후에 우분투 14.10이전 버전이라도 Unity process가 기동되지 않을 수 있기는 하다. 동일한 증상이지만 원인이 다르다. 이 경우에는 NVIDIA proprietay driver를 재설치함으로써 문제를 해결 할 수 있다.

ibus-hangul이 주범?

우분투 14.04와 14.10사이에도 많은 차이가 있지만 dconf database를 건드리는 놈들 중에 가장 큰 변화가 있었던 놈 중에 하나가 ibus-hangul이다. 물론 지금으로선 구체적인 물증이 없다.

더 많은 우분투 사용자가 고통을 겪기까지는 나도 고통을 감내해야할지도...


2015/01/06

Ubuntu Unity Login 이슈


Unity Desktop Freeze

우분투 14.10을 그럭저럭 잘 쓰다가 지난 12월 초에 우분투 daily update를 하고 나서 갑자기 Unity Desktop을 사용할 수 없는 일이 발생했다. 증상이 마치 NVIDIA proprietary driver 사용시 OpenGL 라이브러리 업데이트 됐을 때와 동일하게 Unity로 로그인은 되는데 로그인 후에 배경화면만 보이고 Unity Launcher나 Panel이 기동되지 않아 아무것도 할 수 없는 상태가 되었다.

공교롭게도 update 목록 중에 xserver-xorg-core와 xserver-common 패키지가 포함되어 있어서 동일한 문제인 줄 알았다. 이전에 발생했던 문제이기에 복구모드에서 NVIDIA 드라이버를 새로 설치했으나 마찬가지... 혹시나 NVIDIA 드라이버 문제일까 싶어서 nouveau 드라이버로 X-Window를 기동해도 Unity로 진입할 수 없었다. Update 후에 발생한 Unity 문제인 듯 싶어서 문제가 해결될 때까지 Gnome Desktop(gnome 3 shell)을 사용하기로 하였다.

Gnome Shell 사용

GUI 환경에 적응되어 있다보니 복구모드에서 콘솔로만 작업하는 것이 얼마나 답답한지 실감할 수 있다. 아무튼 예전에 작성했던 Ubuntu 복구 모드 활용을 써먹을 일이 생겼다. 우분투 복구모드로 부팅 후 WIFI를 콘솔에서 쓸수 있게 설정하고 나서,

$ apt-get install gnome-shell

$ reboot

로그인 시에 Unity로 되어 있는것을 Gnome으로 선택하면 Gnome Shell로 로그인 한다. Gnome 3 Shell도 사실 훌륭한 Desktop 환경이기는 하다. 그러나, 내가 Unity Desktop에서 벗어나지 못하는 단 한가지 이유가 있다. 현재로서는 Unity Desktop에서만 가능한 기능이기도 하다. 그것은 Unity가 Window Title Bar와 Menu Bar를 통합해서 사용할 수 있도록 해 주는 것이다. 수직 한 줄이 없어지는 것이지만 대단한 차이로 느껴진다. 노트북 사용시엔 더욱 크게 느껴지는 부분이고, 지금은 iMac 27인치 환경에서 조차 Gnome이나 Mint를 쓰다보면 답답한 느낌이 들 정도이다. 이 느낌은 Virtual Box를 쓸때 매우 확연히 나타난다.

Gnome Shell을 사용하면서 한가지 좋은 점은 ibus-hangul과는 궁합이 잘 맞더라는 것이다. 우분투 14.10에서도 한영키 전환시 상단 패널에 한영상태 아이콘이 적절하게 반응한다.

Unity Desktop 복구

그 동안 Gnome Shell을 계속 쓰다가 답답함을 해소하고자 그 간에 문제가 해결됐는지 구글링을 해 보았으나 daily update 후에 발생한 증상은 없었다. 다만, 우분투 14.04에서 14.10으로 upgrade 한 사용자 들에게서 비슷한 증상이 있는 것 같다. 혹시나 dconf database가 깨진것일 수도 있다는 생각이 들어 새로운 User를 생성해서 Unity로 로그인이 가능한지 시험해 보았다. 역시나 그게 문제였던것 같다. 새로운 User로는 Unity 로그인 후 모든 것이 정상이다.

원인을 알았으니 해결 방법은 별것 없다.

$ cd ~/.config/dconf
$ mv user org-user.bak

즉, 사용자의 dconf database 파일을 삭제하면 새로 Unity 로그인시에 새로 생성해 준다.

번거롭지만 위와 같이하면 우분투 새로 설치했을 때 처럼 Unity Desktop 설정을 모두 다시 해 주어야 한다. 배경화면 교체, 폰트 설정, Launcher App 등록 등등을 모두 다시 해야 한다. 이외에도, 영문 사용자만 해당되는지 확실하지 않지만 ibus-hangul을 사용하기 위해서는 [System Settings] > [Text Entry] > [+] 에서 "Korean (Hangul)" Input source를 추가해 주고 나서 Unity 상단 패널에서 태극 문양 아이콘을 선택해야 한영키가 동작한다.

2014/11/25

Ubuntu VirtualBox Guest 복구


Virtual Box 4.3.18로 우분투 14.10 게스트 가상 머신을 EFI 모드 + btrfs 파일시스템으로 설치했는데 설치 후 부팅이 안되는 문제가 있었다. 우분투 14.10의 문제인지 버추얼 박스 문제인지는 확실하지 않다. 마침 어제 Virtual Box 4.3.20 update가 떠서 홈페이지 ChangeLog를 봤더니 EFI 수정사항이 있단다. 업그레이드하고 나서 그간 방치했던 우분투 14.10 게스트를 다시 돌려 봤으나 역시 안돌아 간다.

Virtual Box 4.3.20 Upgrade...

그런데, EFI 모드 + btrfs 파일시스템인 우분투 14.04 게스트 가상 머신은 호스트를 우분투 14.10으로 Clean Inastall 하고 나서도 잘 돌아가던 놈이다. Virtual Box Guest를 upgrade하려고 이놈을 부팅했더니 로그인 후 먹통이다. 콘솔 모드로는 로그인이 가능해서 Guest Additions를 설치하려고 했으나 [Device] > [Insert Guest Additions CD Image...] 메뉴를 사용하면 이미 mount 되어 있어서 mount가 안된다고 경고 창만 뜬다. 일단, 콘솔에서 강제로 아래와 같이 설치했다.

$ sudo mount /dev/cdrom /mnt
$ cd /mnt
$ sudo ./VBoxLinuxAdditions.run

$ sudo reboot

Virtual Box Guest에 발생한 문제들

재부팅하고 나니 문제가 더 심각해 져 있었다. EFI System Partition이 마운트가 안돼서 Skip하던지 Manual로 마운트 해 보란다. 놀랍게도 Skip을 하니까 부팅은 된다. 화면 크기 조정도 안되고 투명창 효과도 사라진 걸 보니 Guest Additions가 잘못 설치됐을 거란 생각이 들어 다시 설치하려고 iso 파일을 마운트하려고 했더니 황당한 오류가 발생...

$ sudo mount /dev/cdrom /media/cdrom
mount: unknown filesystem type 'iso9660'
EFI System Partiton을 마운트 하면 아래와 같은 오류 메시지가 나온다.

$ mount -t vfat /dev/sda1 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sda1,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
$ dmesg | tail
[ 1605.267871] FAT-fs (sda1): IO charset iso8859-1 not found
또 다른 문제도 발생했는데 패키지 관리 시스템까지 망가진 것이다. apt-get install -f 하란다.

$ sudo apt-get install -f
....... 
E: Internal Error, No file name for libc6
W: Could not perform immediate configuration on 'multiarch-support:x86_64'. Please see man 5 apt.conf under APT::Immediate-Configure for details. (2)
E: Sub-process /usr/bin/dpkg returned an error code (1)
음... 망가져도 이렇게 우분투가 망가지는 걸 본건 처음이다. 기왕 망가진거 우분투 설치 iso 로 부팅해서 복구해 보기로 했다.

우분투 설치 iso로 우분투 게스트 부팅 후 복구

버추얼 박스 Storage에 우분투 14.04.1 iso 이미지를 CD에 지정하고 재부팅한 후 터미널을 띄워서 Grub을 우선 복구했다. 참고로 /dev/sda2가 우분투가 설치된 btrfs 파일시스템이고, /dev/sda1이 EFI System Partition이다.

$ sudo -i

$ mount -o subvol=@ /dev/sda2 /mnt
$ mount -o subvol=@home /dev/sda2 /mnt/home
$ for i in /sys /proc /run /dev; do mount --bind "$i" "/mnt$i"; done

$ chroot /mnt
$ mount /dev/sda1 /boot/efi
$ grub-install /dev/sda
$ update-grub

그 다음은 패키지 관리 시스템을 복구했다. 먼저, 시스템 전체가 망가진것인지 확인하기 위해서 아래 명령이 정상인지 확인한다.

$ /bin/date

결과가 다행히 정상이다. 즉, 패키지 데이터베이스만 깨진 것이다. 패키지 status backup 파일 중 괜찮아 보이는 놈을 사용하기로 했다.

$ mv /var/backups/dpkg/dpkg.status.2.gz /var/lib/dpkg/
$ cd /var/lib/dpkg
$ mv status org-status
$ gunzip ./dpkg.status.2.gz
$ mv dpkg.status.2 status

$ reboot

여기 까지 하고 나서 재부팅해서 apt-get update 했더니 반응이 없다. 저장소 서버를 교체해 줄 필요가 있어 보였다. 소프트웨어 저장소 서버를 KAIST FTP에서 Main 서버로 교체했다.

$ apt-get update
$ apt-get upgrade

교체 후 위 두 명령이 제대로 동작한다. 소프트웨어 upgrade가 동작하는 것을 보니 패키지 관리 시스템은 복구가 된 것이 분명하다.

문제는 앞서의 mount 오류가 여전히 발생하고 있다는 것이다. 그런데 upgrade 목록에서 새 Kernel이 마침 올라와 있어서 혹시나 하고 Kernel을 Uprade 한 후 재부팅 했더니 mount 문제도 해결됐다.

그리고 나서, Virtual Box Guest Additions도 다시 설치하고 재부팅하니 모든 것이 정상으로 돌아왔다.

복구 소감

어디서 부터 문제가 시작된 것인지는 너무 당황하고도 급하게 복구하느라 정확히 알 수 없지만 Virtual Box Upgrade를 앞으로는 좀더 신중하게 할 필요가 있겠다.

우분투 14.10이 EFI 모드에서 안돌아 가는 문제가 해결됐는지는 Virtual Box 14.10 저장소 버전이 나온 후 다시 시도해 볼 필요가 있겠다. EFI 문제인지 EFI + btrfs 파일시스템 문제인지도 확실하지 않다.

2014/10/31

Ubuntu 14.10 ibus 설정 및 한글 이슈


우분투 14.10에서는 ibus-hangul 설정이 완전히 바뀌었다. 한마디로 다른 패키지와의 의존성을 탈피하기 위해 독립선언을 했다고나 할까? 이에 따라 "Ubuntu 14.04 ibus 한영키 설정과 이슈"에서 다루었던 ibus 한영키 설정 방법들은 대부분 의미가 없게 되었다. 기본적으로는 사용자가 아무것도 건드리지 않아도 한글 언어팩이 설치됐으면 한영키로 한글 입력이 가능하도록 하자는 취지이다. 일단, 우분투 14.10 beta2에서 확인한 바로는 설치시 언어를 "한국어"로 설치하면 데스크탑 키보드 환경에서는 아무 설정없이도 우분투만 설치하면 한영키가 기본 한영전환키로 잘 동작한다.

그런데, 한국 우분투 커뮤니티의 최근 게시물을 보면 노트북에서는 잘 동작하지 않는 듯하다. 또한, 나처럼 데스크탑 키보드 환경에서 우분투 설치시 언어를 영어로 설치한 경우에도 ibus-hangul이 정상 동작하지는 않는다. 아마 영어 뿐만 아니라, 한국어가 아닌 다른 언어로 설치할 경우에도 비슷한 문제가 발생할 것이다.

우분투 14.10을 영어로 설치시 ibus 한영키 설정 방법

1. 한글 언어 팩 완전히 설치

"Ubuntu 14.10 Clean Install" 게시물에서 언급한 바와 같이 우분투 설치 시에 시간대(Time Zone) 설정을 Seoul로 했으면 한글 언어팩이 자동으로 추가된다. 이것 만으로는 안되고 우분투 설치 후 [System Settigs] > [Language Support] 아이콘을 선택하면 누락된 언어팩을 자동으로 설치해 준다. 설치 후 반드시 재로그인 해야 한다.

2. "Korean(Hangul)" input source 추가

ibus가 제대로 동작하기 위해, [System Settings] > [Text Entry] > [Input sources to use:] 에서 아래 화면과 같이 "Korean(Hangul)"을 추가하고 [^] 버튼으로 맨 위로 올려 놓아야 한다. 그리고 나서, 재로그인 하거나 Unity 상단 패널의 [input method] 아이콘을 선택해서 "Hangul"을 선택하면 태극 문양 아이콘 상태가 되는데 이 때부터 한영키가 동작한다.


참고로, 기본 우분투 설치후 화면을 위의 설정과 비교하기 위해 아래에 같이 올려 놓았다.


3. 한영 전환키 변경

한영 전환키 설정과 관련해서는 우분투 14.04와 달리 위의 화면에서 [Switch to...] 두 곳에 한영 전환키를 설정하면 절대로 안된다. 한영키 대신 다른 키를 사용하고 싶으면 Unity 상단 패널의 태극문양 아이콘을 선택해서 [Setup]을 누르거나 터미널에서 아래 명령을 사용하면 된다.

$ ibus-setup-hangul

우분투 14.10 한글 이슈

1. gedit 및 Google chrome 등 GTK 2 애플리케이션에서의 한글 입력 문제

위의 ibus 한영키 설정방법 만으로도 터미널에서 한영키로 한글 입력해 보면 별 문제가 없어 보인다. 그런데 gedit를 사용해 보면 새로운 문제가 발생한다. 단어나 문장을 Copy & Paste하고 나서 한글 입력이 "가나다"를 입력하면 "ㄱㅏㄴㅏㄷㅏ"와 같이 바뀐다.  또한, gedit에서 갑자기 Mouse Pointer가 사라지는 증상이 생긴다. 다른 Window를 선택했다가 gedit로 돌아오면 두가지 현상이 모두 해결되기는 한다.

gedit 뿐만 아니라, Google Chrome에서도 한글 입력이 안되거나 스페이스 키가 오작동하는 문제가 발생한다. 이는 Mint 17에서 나타나는 한글 입력 문제와 동일한 것이다.

$ sudo apt-get install ibus-gtk

우분투 14.10에는 ibus-gtk가 ibus와 함께 설치 되지 않았기 때문에 발생하는 문제이다. gtk 2를 사용하는 대부분의 애플리케이션에서 한글입력 문제가 발생할 것이다.

참고로, Mint 17에서는 ibus-gtk3 패키지도 누락된 것 같다.

$ sudo apt-get install ibus-gtk3

ibus-gtk나 ibus-gtk3를 설치한 후에는 GTK_IM_MODULE 환경변수가 올바로 동작하도록 하기 위해 재로그인해야 한다.

2. 한영 전환 상태 아이콘 필요

우분투 14.04 버전까지는 ibus 사용시 태극 문양이 한글 입력 상태를 의미했다. 우분투 14.10에서는 태극 문양이 ibus-hangul이 정상적으로 설치되었음을 의미한다. 즉, 우분투 14.10에서는글자를 입력한 후에야 한글입력 상태인지 영문 입력상태인지 알 수 있다는 뜻이다.

3. Qt 5.2+ 애플리케이션에서의 한글 입력 문제

Qt 쪽에서 관련 개발자들이 작업 중인데 언제 해결 될지는...

4. 기타 노트북 키보드 한영키 문제

나중에 기회가 되면 확인 필요...

우분투 한글 언어팩 설치 관련 개선 필요 사항

앞서 "Ubuntu 14.10 Clean Install" 게시물 중간에 언급한 바 있지만, 우분투 설치 프로세스 상에서 한글 언어팩 설치 여부를 언제 결정하는 것이 합리적인가 하는 문제와 "Korean(Hangul)" input source를 우분투 설치 후에 수작업으로 반드시 해 주어야 하는가 하는 문제 들에 대해서 개선이 필요하다. 이것은 우분투 14.10만의 문제가 아니고 우분투 설치 전반에 대한 문제이다.

1. 우분투 설치 프로세스 중 한글 언어팩 자동 설치 결정 시점

일단, 현재 한글 언어팩 설치 여부는 시간대를 서울로 설정할 때 결정하고 있는 듯 하다. 미국인이 서울에 거주하면서 한글을 사용하지 않는 경우도 있고, 한국인이 외국에 거주하면서 한글을 사용하는 경우도 있기 때문에 시간대를 가지고 한글 언어팩 설치 여부를 결정하는 것은 문제가 있다. 키보드를 한글 키보드로 설정했을때 한글 언어팩을 자동 설치하도록 해주면 될 것이다.

2. "Korean(Hangul)" input source 자동 추가

또, "Korean(Hangul)" input source를 추가하는 것도 한글 키보드를 선택했을 때 자동으로 추가되도록 하면 좋을 것이다.

3. 한글 언어팩 불완전 설치 문제

한글 언어팩이 완전히 설치되지 않는 문제도 남아 있지만 우분투 14.10에서는 처음 로그인 후 경고창도 뜨더라. 반자동인 셈인데 그럭저럭 참을만 하기는 하다.

[추가] ibus 사용시 게스트 가상머신에서의 한영키 사용 문제는 해결됨

우분투 14.04에서 ibus 사용시 별도의 입력 환경이 있는 Virtual Box guest 머신으로 한영키 시그널이 잘 전파되지 않아 한영키를 쓰기 어려웠던 문제가 있었는데 우분투 14.10에서는 발생하지 않는다. Windows 게스트나 우분투 게스트나 한영키를 쓰는데 문제가 없다.

Mac에 Ubuntu 14.10 설치 후 부팅 이슈


"Ubuntu 14.10 Clean Install"에서 언급했듯이 우분투 14.10 설치 후에 iMac에서 우분투로 부팅할 수 없는 문제가 발생했다. 현재, iMac은 Mac OS X Yosemite, Windows 8, Ubuntu 14.10의 Triple-OS가 EFI mode로 설치 되어 있다. 부팅은 "Apple Mac에서 EFI Multi-OS Booting"에서 다룬 바와 같이 Mac OS X의 boot manager를 사용하도록 설정되어 있다. 

우분투 14.10 설치 후 Mac 부팅시 나타나는 증상

일단, 우분투 14.10을 설치하고 나서 부팅하니 부팅 순서가 바뀌었다. Option키를 누르지 않으면 Mac OS X로 부팅하도록 했었는데 Windows로 부팅한다. 아마 UEFI 기본 boot loader(fallback bootloader)를 Windows boot manager로 해 놓아서 그런 것 같다. 나중에 우분투로 부팅해서 확인해 보니, NVRAM 정보가 reset 되어 있었다. 즉, 예전에 우분투의 efibootmgr로 설정했던 부팅 순서 정보도 모두 사라졌다.

또한,  부팅시 Option키를 누르고 우분투를 선택하면 grub> prompt로 떨어지고 거기서 아무 것도 할 수 없는 상태가 된다.

해결 방법

먼저, Windows로 로그인 한 후에 Boot Camp 제어판에서 "Mac OS X로 부팅" 설정 후 재부팅하면 이후부터는 Mac OS X로 부팅한다. 이제, Mac OS X로 재부팅 후, 반드시 우분투 ESP(EFI System Partiton) 파티션의 EFI 폴더를 다시 복사해 주고 grubx64.efi에 대한 boot.efi 하드 링크를 다시 생성해 주어야 부팅시 Option키 눌러서 우분투를 선택하여 부팅할 수 있게 된다. 우분투 14.04에서는 grubx64.efi 대신 shimx64.efi로 boot.efi 하드 링크를 생성해도 부팅이 잘 됐었는데 Bug 때문인지 부팅시 오류가 생긴다.

즉, Mac OS X 터미널에서 아래와 같이 해 주면 된다.

$ sudo mkdir /mnt
$ sudo mount -t msdos /dev/disk0s1 /mnt

$ cd /Volumes/MDATA
$ sudo rm -rf ./EFI/ubuntu/
$ sudo cp -R /mnt/EFI/ubuntu ./EFI/

$ sudo ln -f /Volumes/MDATA/EFI/ubuntu/grubx64.efi /Volumes/MDATA/System/Library/CoreServices/boot.efi

우분투 14.10에서 Security 관련해서 Grub이 뭔가 바뀐 때문인지는 확실하지 않다. 어쨌든, 우분투 재설치할 때 마다 이 작업을 해야하는 불편함이 생겼다. rEFInd를 Mac OS X 파티션에서 사용할 경우에 Mac OS X가 upgrade 될 때마다 rEFInd를 재설치해야 하는 번거로움과 비슷한 일이다.

Mac 사용자 들을 위한 권장 사항

Mac에서 Multi-OS를 사용하는 사용자들은 안전을 위해 boot manager로 rEFInd를 같이 사용하는 것이 좋겠다.

2014/10/30

Ubuntu 14.10 Clean Install


지난 주 말에 우분투 14.10이 출시되었다. 이번 버전은 데스크탑 보다는 서버 쪽의 Upgrade 내용이 주를 이루는데 Cloud Computing 관련 Upgrade가 많다. 데스크탑 쪽에서는 Mir와 Unity 8의 개발이 진행 중인데 내년이나 내 후년 쯤에야 일반 사용자들이 쓸만할 정도가 될 것이다. 그러다 보니 별로 Upgrade하고 싶은 생각이 들지 않았는데 나이가 들수록 밀려오는 귀차니즘 타파 차원에서 iMac에 설치된 우분투를 Clean Install 하기로 했다.

Clean Install vs. Upgrade

우분투 버전업할 때마다 고민하는 부분인데 경험상 Clean Install이 낫다. 설치 시간으로 보면 둘다 비슷하다고 볼 수 있다. Upgrade하면 1시간 반에서 2시간 정도 지가 알아서 자동 Upgrade 해 주니까 편리한 측면과 기다리는데 따른 지겨움이 있는데, 뭔가 문제가 생겼을 때 원인을 파악하기 어렵다. Clean Install의 경우에는 우분투 설치시간 자체는 10분 정도 밖에 걸리지 않지만 데스크탑 환경도 새로 설정해 주어야 하고, 자주 쓰는 프로그램들도 다시 새로 설치하고 환경 설정도 다시 해 주어야 한다. 결국 전체 시간은 비슷하고 Clean Install을 할 경우 사용자가 세세히 신경을 써야 할 부분이 많다.

뜬금 없지만 Mac OS X나 iOS의 자동 Upgrade는 매우 훌륭한 편이다. 문제가 거의 생기지 않더라는 것인데 우분투 자동 Upgrade는 뭔가 되던 것이 안되는 일이 꼭 생긴다.

Clean Install을 잘 하기 위해서는...

평소에 자주 쓰는 프로그램들에 대해 설정 변경 사항을 기록하거나 백업 받아 놓는게 좋다. 설치시에도 설치 순서나 과정을 정리해 둘 필요가 있고 이 글도 그런 차원이다. 그리고, 최초 OS 설치시에 사용자 데이터 파티션과 OS 파티션은 반드시 분리해 두는 것이 좋은 습관이다. OS만 다시 설치하면 되기 때문이다.

Clean Install을 위한 사전 준비

우분투가 이미 설치되어 있는 상황에서 Clean Install 할 경우에 가장 빠르고 쉬운 방법은 하드 디스크에 저장된 우분투 설치 iso 파일로 부팅해서 설치하는 것이다. USB 메모리도 필요 없다. "하드디스크의 우분투 설치 iso로 우분투 설치" 게시물을 그대로 따라가면 된다. 14.10을 설치하면서 내용 중에 일부 오류가 있어서 수정하였다. Grub 부트 메뉴 엔트리에서 iso 파일 경로만 자신의 환경에 맞게 수정해 주면 된다.
menuentry "HDD Ubuntu 64-bit iso" {
   set isofile="/boot-isos/ubuntu-14.10-desktop-amd64.iso"
   loopback loop (hd0,9)$isofile
   linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject
   initrd (loop)/casper/initrd.lz
}
이제 우분투를 새로 설치하기 위해서 하드디스크의 우분투 설치 iso로 부팅한다. Grub 메뉴 중에 위에 새로 추가한 "HDD Ubuntu 64-bit iso"를 선택한 후, 다시 "Try Ubuntu without installing" 메뉴를 선택해서 우분투 live CD 환경으로 부팅한다. 부팅하고 나서 아래 스크린 샷에서 보듯이 두 가지만 해 주면 된다. 즉, 사용자 Data를 백업 받고 나서 사용자 Data 파티션을 unmount 해 주는 것이다.


기존 우분투 환경에서 사용자 aaa의 폴더는 /home/aaa 였고, 우분투 OS와 별개의 파티션인 /dev/sda9를 사용하고 있었다. 위의 스크린샷에서 우분투 설치 iso 파일도 같은 파티션에 복사해 놓았기 때문에 - 즉, 기존의 우분투 환경에서 /home/boot-isos 폴더 사용 - 하드디스크의 iso로 부팅하면 자동으로 /dev/sda9 파티션을 /isodevice 폴더에 mount 시켜 놓고 있음을 알 수 있다.

먼저, 아래와 같이 사용자 폴더에 사용자 데이터가 있기 때문에 폴더를 옮겨 백업을 받았다. 새로 우분투 설치시에도 동일한 사용자명을 사용할 것이기 때문이다.

$ sudo mv aaa aaa-14.04

그 다음은, 우분투 설치시에 기존의 우분투 OS 파티션을 포맷할 것이기 때문에 해당 디스크가 있는 파티션은 모두 unmount 해야만 파티션 테이블을 수정하여 설치를 진행할 수 있기 때문에 아래의 명령을 반드시 해 주어야 한다. USB 메모리로 설치할 경우에는 USB와 하드디스크가 분리된 물리적 장치이기 때문에 이 과정이 불필요하지만 여기서는 하드디스크의 iso로 설치하기 때문에 반드시 필요한 작업이다.

$ sudo umount -l /isodevice

우분투 14.10 설치

이제 바탕환면의 "Install Ubuntu 14.10" 아이콘을 선택해서 우분투 설치를 진행한다.이 과정은 일반적인 우분투 설치 과정과 동일하다. 다만, 기존의 우분투 OS 파티션만 새로 포맷하고 사용자 파티션만 다시 잡아 주면 된다. 기존에 사용했던 swap 파티션이나 UEFI 모드로 설치 시 사용하는 EFI System Partition(ESP) 들은 자동으로 우분투 설치 소프트웨어가 재사용하도록 설정한다. 설치 과정을 따라 아래 스크린샷 들을 참고하면 된다.

맨 처음 설치 언어 선택이 나오는데, "한국어"로 해도 되고 "English"로 해도 된다. 습관상 영어로 설치한다.


인터넷 속도가 빠르지 않다면 인터넷에 연결하지 않고 설치하면 설치시간이 10분도 안걸린다.


 이제 우분투 설치 파티션을 지정해야 하는데 아래와 같이 "Something else" 를 선택한다.


 아래와 같이 우분투를 설치하고 사용할 파티션을 선택하는 화면이 나온다.


먼저, 기존에 설치된 우분투 파티션을 선택해서 포맷해야 한다. 아래에서 /dev/sda8을 사용하고있었다. 이 파티션을 선택한 후, [Change] 버튼을 선택한다.


아래와 같이 우분투 OS 파티션을 포맷하도록 check해 주어야 한다. Mount 위치는 당연히 "/"이다.


그 다음은 사용자 데이터가 있는 /home 파티션을 지정한다. 나중에 사용자명(aaa)을 지정하면 이 파티션에 새로 /home/aaa 폴더를 만들 것이다. 우분투가 이 파티션을 사용하도록 하기 위해서 다시 [Change] 버튼을 선택한다.


이 파티션은 사용자 데이터가 들어 있는 파티션이므로 당연히 절대 포맷하면 안된다. Mount 위치만 /home으로 지정해 주면 된다.


추가적으로, 현재 /opt 파티션도 별개로 사용자 데이터 용도로 사용하고 있지만 /home 파티션과 동일하게 /opt 파티션을 우분투가 사용하도록 지정하면 되기 때문에 스크린샷은 생략한다.

우분투가 사용할 파티션을 모두 선택한 후의 스크린 샷을 아래에 보였다.


[Install Now] 버튼을 선택하면 아래와 같이 디스크에 Write 할 것인지 물어 보고,


아래와 같이 시간대 설정으로 넘어 간다. 설치 언어는 영어지만 시간대를 Seoul로 선택하면 한글 언어 팩을 자동으로 설치한다. 사실, 이건 좀 문제가 있다. 미국 사람이 서울에 거주할 수도 있고, 한국 사람이 미국에 살 수도 있기 때문이다. 그 다음 화면이 키보드를 선택하는 것인데 키보드를 Korean으로 선택했을 때 한글 언어팩을 자동설치하는게 설치 프로세스상 맞는게 아닌가 한다.


그리고, 키보드 설정에서 Korean을 선택해 준다. 노트북인 경우 101/104 키를 선택하면 된다. 여기서도 우분투 한글 문제에 대해 나중에 별개로 글을 올릴 예정이지만, ibus에서 한글을 사용하기 위해서는 설치 후에 "Korean(Hangul)" input source를 반드시 추가해야 한다. 여기서 Korean 키보드를 선택하면 자동으로 한글 언어팩을 설치하도록 하고, "Korean(Hangul)" input source도 같이 추가해 주면 되지 않나 싶다.


이제, 아래와 같이 기존 우분투에서 사용했던 동일한 사용자(aaa)를 추가한다. 컴퓨터 이름도 동일한 이름으로 지정해 주면 된다.


사용자 설정까지 마치면 본격적으로 우분투를 설치하기 시작한다.


설치를 끝내고 나서 새로운 우분투 14.10으로 재부팅하면 된다. 참고로, 여기에 있는 화면들은 우분투 live CD의 Screenshot 앱으로 캡춰해서 ~/Pictures 폴더에 저장해 놓은 것들이다. 그런데 재부팅하면 우분투 live CD 환경은 RAM에서 실행되고 있는 것이기에 모두 사라져 버린다. 터미널을 띄워서 사용자 파티션을 마운트해서 이미지들을 모두 하드디스크로 옮기고 나서 다시 unmount 해 준 후에 아래 화면에서 [Restart Now] 버튼을 선택하면 된다.


우분투 14.10 드라이버 설치

사실, iMac에서 우분투 14.10을 설치하고 나서 우분투로 부팅하지 못하는 사태가 발생했는데, iMac과 관련된 우분투 14.10 이슈에 대해서는 이 글의 주제에서 벗어나기 때문에 별개로 "Mac에 Ubuntu 14.10 설치 후 부팅 이슈"를 참고하면 된다. 참고로, 현재 iMac에는 Windows 8과 Mac OS X가 같이 설치되어 있다.

또한, 영문으로 우분투 14.10을 설치한 탓인지 ibus-hangul이 제대로 동작하지 않는 문제도 생겼다. 이것 역시 별개로 "Ubuntu 14.10 ibus 설정 및 한글 이슈"를 참고하면 된다.

우분투를 새로 설치 한 후 가장 먼저 해야 할 일은 하드웨어가 제대로 동작하도록 드라이버를 설치하는 일이다. 

iMac의 경우에는 우분투 설치할 때마다 WIFI가 동작하지 않는다. 하드디스크에 저장된 우분투 설치 iso 파일을 Archive Manager로 열어서 dkms와 bcmwl-kernel-source 패키지를 설치해 주어야 한다. 파일의 위치는 아래와 같다. 아래 파일을 double click 하면 설치할 수 있다.
  • dkms: /pool/main/d/dkms/dkms_2.2.0.3-1.1ubuntu5_all.deb
  • bcmwl-kernel-source: /pool/restricted/b/bcmwl/bcmwl-kernel-source_6.30.223.248+bdcom-0ubuntu1_amd64.deb
NVIDIA 드라이버는 nouveau 드라이버가 정상 동작하기 때문에 굳이 설치할 필요는 없지만, 이전 게시물을 참고하면 된다.

우분투 소프트웨어 Upgrade

우분투는 새 버전이 출시되고 나서도 버그 fix를 계속하기 때문에 소프트웨어 Upgrade를 반드시 해 주는 것이 좋다. 한글 언어팩이 설치된 경우에는 저장소 서버가 자동으로 KAIST FTP로 지정되어 있는데 [System Settings] > [Software Updates] > [Ubunt Software] > [Download from:] 에서 "Main Server"로 임시 교체해 주는 것이 좋다. 그리고 나서,

$ sudo apt-get update
$ sudo apt-get upgrade

사용자 데이터 복원

앞서 언급한 바 있듯이 우분투 14.10으로 부팅하면 aaa 사용자에 대한 /home/aaa 폴더가 새로 만들어 졌다. 설치 전에 백업 받아 놓은 /home/aaa-14.04의 내용물들을 /home/aaa로 옮겨야 한다. 단순히, /home/aaa 폴더를 삭제하고 /home/aaa-14.04 폴더를 /home/aaa로 옮기면 안된다. 왜냐하면 사용자 폴더에는 이전 버전의 우분투 환경에서 설정했던 정보들도 같이 저장되어 있기 때문에 Clean Install이라는 의미가 퇴색된다. 실제로 해봤더니 당장 작업 공간이 작동하지 않는다. GUI 환경의 데스크탑 설정이나 각종 프로그램 설정들이 새 버전에서의 설정과 다르기 때문에 발생할 수 있는 문제인 것이다.

먼저, 우분투가 기본으로 제공하는 폴더들 부터 옮겨와야 한다. 예를 들어 ~/Documents 폴더는새로 설치하면 비어 있지만 기존에 내가 작성했던 문서들을 거기에 저장해 놓았었다. 아래의 명령으로 한번에 대체할 수 있다.

 $ for i in Desktop Downloads Pictures Templates Documents Music Public Videos; do (rmdir ~/"$i"/) && (mv "/home/aaa-14.10/$i" ~/); done

그 다음은, 기존의 사용자 폴더에 내가 만들어 놓은 폴더나 파일들을 옮겨 온다. 아래 명령으로 한방에 끝~!

$ mv /home/aaa-14.04/* ~/

대부분의 우분투 데스크탑 설정이나 애플리케이션 설정 폴더/파일 들은 "."으로 시작하기 때문에 위의 명령으로 "."으로 시작하는 폴더/파일 들은 자동 제외된다. 물론, 드물게 일부 애플리케이션의 경우 "."으로 시작하지 않는 폴더/파일을 사용하고 있다면 다시 /home/aaa-14.04로 원위치 시켜 놓는게 좋다. 참고로 "."으로 시작하는 Unix/Linux 파일들은 숨겨져 있어서 "ls -a" 명령으로 볼 수 있다.

추가적으로 터미널을 자주 사용하다 보니 .bashrc 파일을 빨리 옮겨 오는 것이 좋다.

$  mv /home/aaa-14.04/.bashrc ~/

우분투 데스크탑 환경 설정

사용자 데이터를 복원하고 나서 해야할 일은 우분투 데스크탑 환경을 예전에 쓰던대로 맞추는 일이다. ibus 한글 설정, 데스크탑 한글폰트 설정, 배경화면 교체, Unity 환경 설정, 자주 사용하는 앱을 Launcher에 등록하기 등등을 수작업으로 해주어야 한다. 

한글 폰트설정은 Unity Tweak Tool을 설치해서 폰트를 한글 폰트로교체해 주면 된다. 유니티 환경 설정은 이전 게시물을 참조하면 된다. ibus 한글 설정에 대해서는 "Ubuntu 14.10 ibus 설정 및 한글 이슈"에 정리했다.

자주 사용하는 소프트웨어 설치 및 설정

자주 사용하는 소프트웨어는 개인 별로 다르기 때문에 여기서는 자주 사용하는 몇개 소프트웨어에 대해서만 언급한다.

Google Chrome

크롬은 구글에서 따로 다운로드 받아야 한다. 검색해서 다운로드 받으면 된다. 설치후에 자동으로 저장소가 등록된다. 중요한 것은 이전에 사용하던 bookmark나 plug-in을 옮겨 오는 일이다. 구글 크롬을 설치하고 나서 크롬을 실행하기 전에 아래와 같이 해 주면 된다.

$ mv ~/.config/google-chrome ~/.config/org.google-chrome
$ mv /home/aaa-14.04/.config/google-chrome ~/.config/

Virtual Box

버추얼 박스도 Oracle 버추얼 박스 홈페이지에서 하라는 대로 따라해서 설치하면 된다. 저장소를 추가하고 설치하는 것이 좋다. 단, 아직 우분투 14.10저장소가 없으므로 trusty(14.04) 버전 저장소를 이용하면 된다. 설치 후, 이전에 사용하던 설정을 옮겨 오는 것이 중요하다.

$ mv /home/aaa-14.04/.VirtualBox ~/

기타 소프트웨어

아래는 우분투 설치 후 습관적으로 설치하는 소프트웨어 들이다. 이전 우분투 환경에서 따로 설정했던 것들이 있다면 설치 후에 위의 예를 참조하여 해당 소프트웨어가 사용하는 폴더나 파일을 옮겨 주면 된다.

$ sudo apt-get install gparted synaptic dconf-tools
$ sudo apt-get install compizconfig-settings-manager
$ sudo apt-get install ghex deluge vlc
$ sudo apt-get install valgrind exuberant-ctags cscope

Unity Desktop이나 Gnome Desktop 환경에서 KDE application 들을 설치할 때는 불필요한 KDE 파일들이 설치되지 않도록 아래와 같이 옵션을 주는게 좋다.

$ sudo apt-get install --no-install-recommends kdiff3 kchmviewer

2014/10/07

Ubuntu USB WIFI adaptor


이전 글에서 아이맥에서 WIFI 드라이버로 Broadcom proprietary driver를 사용하면 된다고 했었다. 모델은 iMac13,2에서 WIFI는 Broadcom BCM4331을 사용하고 있다. 그런데, 우분투에서 가끔씩 네트워크 접속이 잘 안되거나 끊기는 문제가 있다. chrome에서 확인해 보면 웹사이트 접속시 아래 상태바에 Resolving host...라는 메시지가 뜨고 접속이 안될때가 종종 생긴다.

그동안 불편한 대로 참고 써왔는데 오래 전에 Anygate USB WIFI adaptor를 사놓고 쓸일이 없어서 보관하고 있는 것이 생각이 났다. 구형이라 IEEE 802.11bg까지만 지원된다. 그런데 어차피 Broadcom 드라이버도 우분투에서는 IEEE 802.11n을 지원하지 않기 때문에 속도는 매한가지다. 네트워크 접속의 안정성이 더 중요한 문제라서 이 놈을 우분투에서 사용해 보기로 하였다.

우선 Anygate 드라이버 구글 검색을 해보니 안잡힌다. 아래와 같이 리눅스 드라이버 명을 알아내야 한다. isl3887이다.

$ lsusb | grep -i wireless
Bus 003 Device 002: ID 0cde:0015 Z-Com XG-705A 802.11g Wireless Adapter [Intersil ISL3887]
구글링해 보니, linux-firmware-nonfree 패키지를 설치하고 p54usb 모듈을 사용하면 된다고 한다. 하지만, 아래 명령으로 확인해 보면, 우분투 14.04에는 이미 패키지도 설치되어 있고 p54usb도 이미 로딩되어 있다.

$ dpkg -l | grep linux-firmware-nonfree
$ lsmod | grep p54usb

아래 두 가지 명령으로 WIFI 드라이버가 정상 작동하는지 알 수 있는데, wlan0는 이미 사용하고 있으니 wlan1이 잡혀야 하는데 안잡힌다.

$ iwconfig
$ ifconfig

조금 더 찾아보니 debian wiki에서 해결책이 나왔다.

$ sudo -i
$ wget https://daemonizer.de/prism54/prism54-fw/fw-usb/2.13.25.0.lm87.arm --no-check-certificate
$ mv 2.13.25.0.lm87.arm /lib/firmware/isl3887usb
$ modprobe -r p54usb && modprobe p54usb

$ sudo reboot

위와 같이 firmware를 받아서 모듈을 다시 로딩해야 한다. 그런데, 재부팅까지 해 주어야만 잡힌다.
재부팅 후 iwconfig 해 보면 아래와 같이 wlan1이 잡힌다.

$ iwconfig
wlan1     IEEE 802.11bg  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=14 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          
eth0      no wireless extensions.

lo        no wireless extensions.

wlan0     IEEE 802.11abg  ESSID:"AAA"  
          Mode:Managed  Frequency:2.462 GHz  Access Point: 00:00:00:00:00:00   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
이제 Unity 상단 패널의 WIFI 아이콘을 클릭해서 SSID를 선택하고 비밀번호를 입력해서 Access Point에 접속하면 된다.

일단, 동작은 잘되는데 안정성 문제는 몇일 동안 써봐야 확인될 것이다. WIFI 안정성 문제가 WIFI 드라이버 때문인지도 사실 확실하지는 않다.

추가적으로, 기존의 Windows BCM4331 드라이버를 가지고 ndiswapper로 firmware 모듈을 로딩할 수 있는 방법도 있는데 나중에 시도해 볼만하다.


참고 사이트

https://wiki.debian.org/prism54#p54usb
https://wiki.sabayon.org/index.php?title=Using_Broadcom_wireless_and_ndiswrapper_w/Sabayon_miniEd

2014/10/02

Ubuntu 14.10 beta2 GUI login


우분투 14.10 beta2나 현재 daily-build iso 이미지로 설치하면 GUI 환경, 즉, X-window로 로그인이 안되고 콘솔 모드로만 로그인이 된다. 참고로, Virtual Box에 설치한 경우에는 부팅 후 먹통인 것처럼 화면에 아무것도 나타나지 않는다. 이 때에는 <Host>+<F1>키로 콘솔 로그인이 가능하다. Virtual Box에서는 <Host> key가 <Alt>+<Ctrl> key를 대신한다.

이 경우에 아래와 같이 수동으로 lightdm을 실행하여 Unity Desktop으로 로그인할 수 있다.

$ sudo lightdm start

실행 후, Virtual Box에서는 <Host>+<F7>키로 GUI 환경으로 로그인 할 수 있다.

또 다른 문제는 로그인 후, Unity Desktop에서 뭘 하려고 하면 아래와 같이 인증 창이 자꾸 pop-up 된다. 아래의 예는 배경화면을 바꾸는데도 인증을 요구하고 있다.


init가 필요한 프로세스 들을 제대로 구동하고 있지 않고 있다는 생각이 들어서 예전에 얼핏 upstart를 버린다는 기사를 본게 생각이나서 구글링했더니 추측이 맞았다. 이 모든 문제의 근원은 Ubuntu가 upstart를 버리고 systemd로 가는 과정에서 발생한 문제이다. 아래와 같이 /etc/default/grub 파일을 수정하여 Grub에서 kernel 파라미터로 systemd를 사용하도록 하면 모든 문제가 해결된다. nano 등 편집기를 이용하여 아래 부분과 같이 수정한다.

$ sudo nano /etc/defaul/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash init=/lib/systemd/systemd"
$ sudo update-grub
$ sudo reboot

위의 문제는 14.10 정식 버전이 나오면 upstart를 완전히 걷어냄으로써 해결될 것으로 기대한다.


참고 사이트

https://wiki.ubuntu.com/systemd
http://www.zdnet.com/after-linux-civil-war-ubuntu-to-adopt-systemd-7000026373
http://www.reddit.com/r/linux/comments/132gle/eli5_the_systemd_vs_initupstart_controversy

2014/09/27

uim 벼루 Qt5 immodule build


우분투 uim 기본 패키지에는 Qt5 immodule이 들어 있지 않아서 Qt5 애플리케이션에서 한글 입력이 안된다. uim 사이트에 가보니 2013/6/30일자 uim-1.8.6 소스가 최신인데 받아 보니 Qt5를 지원하지 않는다. 문서에도 Qt5에 대한 언급이 전혀 없다. 혹시나 해서 github에서 소스를 받아 보니 Qt5 immodule 소스가 있었다. Qt5 모듈을 build하는 문서가 없어서 좀 헤매야 했는데 헤맸던 것들을 정리한다.

결론은, uim Qt5 모듈을 사용하면 Qt5 애플리케이션에서도 한글입력은 잘 되는데, 안정성 문제가 있다. 한글 입력 문제에 관한 한 uim이 ibus보다 좋아 보인다.

uim Build 및 설치

uim 설치 가이드를 따라가면, 소스를 build하기 위해서 아래의 tool 들이 필요하다.

$ sudo apt-get install intltool
$ sudo apt-get install librsvg2-bin libtool ruby git

build에 필요한 header 파일들도 있어야 하고...

$ sudo apt-get install libanthy-dev libgtk2.0-dev libgtk-3-dev libqt4-dev

그런데, Qt5는 우분투 패키지 구성이 꽤 복잡하다. 한마디로 libqt5-dev가 없다. 일단, 아래 정도가 필요해 보인다.

$ sudo apt-get install qtbase5-dev qtbase5-private-dev qt5-default qtdeclarative5-dev

이제 다시 가이드 대로, 소스를 github에서 받아서 build하고 설치까지 문제가 없다. 아, 도중에 폴더 권한이 없다는 오류가 발생했었다. 해당 폴더(/usr/plugins)를 만들어 주고 사용자 권한을 주면 해결된다. Qt5 모듈이 엉뚱한 폴더를 중간 폴더로 사용하고 있었다.

그리고, ./uim/qt5/immodule/quimplatforminputcontext.cpp 파일 윗부분에 debug 사용하도록 define이 있는데 주석 처리하는게 좋다.

$ git clone https://github.com/uim/uim.git
$ cd uim
$ ./make-wc.sh --with-qt5 --with-qt5-immodule
$ make
$ sudo make install

위와 같이 해서 설치하면 /usr/local 하위 폴더들에 uim 파일들이 분산된다. 단, Qt5 모듈은 Qt5 폴더 (/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts)에 설치된다.

Qt5 모듈은 가야할 위치에 이미 가 있어서 Dynamic loading 문제가 없다. 그런데, GTK 모듈들은 immodules.cache에 등록해 주어야 한다. GTK2는 별로 쓸일이 없을 것 같아서 GTK3 모듈만 아래와 같이 등록하였다.

$ /usr/lib/x86_64-linux-gnu/libgtk-3-0/gtk-query-immodules-3.0 /usr/local/lib/gtk-3.0/3.0.0/immodules/im-uim.so >> /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache

uim 자동 실행

시스템 설정 가이드에 보면 ~/.xinitrc나 ~/.xsession에 아래의 내용을 넣어 주면 된다는데 잘 안되었다.
export GTK_IM_MODULE=uim
export QT_IM_MODULE=uim
export QT4_IM_MODULE=uim
export XMODIFIERS=@im=uim
/usr/local/bin/uim-xim &
그래서, 우분투의 im-config를 사용하기로 하였다. 먼저, ~/.xinputrc에 아래 내용을 등록해 주고,
run_im uim
/usr/share/im-config/data/24_uim.rc 파일을 수정해서 /usr/local 폴더 위치를 잡아 주었다. 그리고 나서 재로그인하면 uim이 잘 기동된다.

uim Qt5 모듈의 문제점

Qt5 애플리케이션에서 한글입력은 아무 문제없다. 심지어 ibus의 Qt5 애플리케이션에서 발생하는 한글입력 문제도 없다. 그런데, 공식 사이트에 Qt5 모듈이 없는 이유를 알게 되었다. 불안정하기 때문이다. 일단, 두어가지 문제를 발견했다.
  • Qt5 애플리케이션을 새로 실행할 때마다 uim-candwin-qt5 프로세스 수가 계속 증가함
  • 애플리케이션을 중지하면 프로세스가 좀 줄어 들지만 다시 새로운 프로세스가 생김
  • Qt5 애플리케이션을 쓰다 보면 컴이 느려지는데 uim-helper-server 프로세스가 CPU를 거의 100% 가까이 잡아먹고 있음

참고 사이트

https://code.google.com/p/uim/wiki/InstallUim
https://code.google.com/p/uim/wiki/UimSystemConfiguration

2014/09/25

하드디스크의 우분투 설치 iso로 우분투 설치


(2014/10/29 오류 수정)

Facebook 우분투사용자모임에 USB 플래시 메모리 없이 하드디스크(HDD)로 우분투를 재설치 할 수 없느냐는 질문이 있어서 겸사겸사 정리해 보기로 했다. 이미 우분투가 설치되어 있는데 우분투를 업그레이드 하기 위해 Clean Install 하고자 한다면 굳이 USB를 사용하지 않아도 되기 때문에 매우 편리한 우분투 설치 방법이다.

우분투 설치를 USB를 사용하지 않고 하드디스크를 이용해서 설치하는 것은 우분투 설치 USB 만들기를 응용하면 쉽게 할 수 있다. 하드디스크를 USB라고 생각하면 되기 때문이다. 다만, 하드디스크에 Grub이 설치되어 있지 않다면 USB가 반드시 필요하기는 하다. 여기서는 우분투가 이미 설치되어 있는 경우에 하드디스크에 저장된 우분투 설치 iso로 우분투를 재설치하는 방법이다. Grub이 당연히 설치되어 있기 때문이다.

우분투를 재설치하려면 우분투 홈페이지에서 내려 받은 우분투 설치 iso 파일은 우분투를 새로 설치할 파티션과는 다른 파티션에 있는 것이 좋다. 평소에 OS와 데이터 파티션을 분리해서 사용하는 것은 여러모로 장점이 많다. Windows를 같이 사용하고 있다면 Windows 파티션에 iso 파일을 복사해서 사용해도 된다. 파티션이 하나 밖에 없다면 parted로 파티션을 분리하는 것이 좋고, 그게 어려우면 iso 폴더를 만들어서 우분투 설치 시에 덮어쓰기로 설치할 수도 있기는 하다.

우분투 설치 iso 파일 위치 확인

기존에 데이터 파티션은 /home에 마운트해서 사용하고 있고 aaa라는 사용자의 Downloads 폴더에 우분투 설치 iso를 내려 받았다고 가정한다. 향후에도 우분투 iso 이미지를 가지고 하드디스크에서 부팅해서 설치할 경우를 대비해서 아래와 같이 /home/boot-isos 폴더를 만들고 사용자 권한을 부여해 두면 좋다. 내려 받은 iso 이미지들은 모두 /home/boot-isos 폴더로 몰아 넣는다.

$ sudo mkdir /home/boot-isos
$ sudo chown aaa:aaa /home/boot-isos
$ mv ~/Downloads/*.iso /home/boot-isos

이제, /home이 어느 파티션인지 알아야 한다. 아래와 같이 /dev/sda9 파티션임을 알 수 있다.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda8        92G   22G   65G  26% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           793M  1.4M  791M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G   17M  3.9G   1% /run/shm
none            100M   76K  100M   1% /run/user
/dev/sda11      145G  129G  8.7G  94% /opt
/dev/sda9        92G   29G   59G  34% /home
/dev/sda1       197M   48M  150M  25% /boot/efi

우분투 설치 iso 파일에 대한 Grub boot menu entry 등록

Grub에서 우분투 설치 iso로 부팅하려면 Grub boot entry를 새로 추가하되, 하드디스크 파티션 정보와 파일 경로를 지정해 주어야 한다. 위에서 /dev/sda9 파티션이니까 디스크의 9번째 파티션이다. 디스크는 첫번째 하드디스크이다. 즉, 아래 menu entry의 (hd0,9)에 해당한다. USB 메모리로 부팅할 경우에도 USB 메모리가 첫번째 디스크가 되므로 hd0이다. 또한, iso 파일 경로는 파티션을 기준으로 하기 때문에 /home/boot-isos/...가 아니라 /boot-isos/ubuntu-14.04.1-desktop-amd64.iso가 됨에 유의할 필요가 있다.
menuentry "HDD Ubuntu 64-bit iso" {
   set isofile="/boot-isos/ubuntu-14.04.1-desktop-amd64.iso"
   loopback loop (hd0,9)$isofile
   linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject
   initrd (loop)/casper/initrd.lz
}
위의 내용을 nano등의 편집기를 사용하여 /etc/grub.d/40_custom 파일 맨 끝에 추가한다.

$ sudo nano /etc/grub.d/40_custom

/boot/grub/grub.cfg를 새로 생성하기 위해서는,

$ sudo update-grub

이제 재부팅 해서 Grub 메뉴 중 위에 만든 "HDD Ubuntu 64-bit iso" 메뉴를 선택한 후, 다시 "Try Ubuntu without installing" 메뉴를 선택해서 우분투 live CD 환경으로 부팅하면 iso 이미지로 부팅해서 우분투를 설치할 수 있게 된다.

$ sudo reboot

우분투 설치 iso로 재부팅 후 우분투 설치전에 해야 할 일

우분투 14.10을 이 게시물 대로 하드디스크의 iso 이미지로 설치하다가 뭔가 빠졌음을 알게 되었다. 우분투 설치 파일을 마구 복사하면서 빨리 설치가 진행되어야 하는데  File System을 인식하지 못해 설치가 진행되지 않고 계속 멈춰 있는 증상이다.

설치 중에 파티션 테이블을 건드리는데 하드디스크의 iso 이미지를 사용하기 위해 하드디스크를 mount 상태로 두고 있으니 파티션 테이블을 수정할 수 없게 된다. 물론 설치 과정 중에 unmount 할지 물어보고 yes라고 해도 root 권한이 없으니 unmount가 안된다.

우분투 설치 icon을 click 하기 전에 <Ctrl>+<Alt>+<t>로 터미널을 띄워서 아래와 같이 umount 해주면 된다.

$ sudo umount -l /isodevice

ibus 기동 방지 및 uim 벼루 설치


우분투 14.04에서 ibus 대신 uim 벼루와 같은 다른 입력기를 테스트 해보려고 ibus를 삭제하면 불상사가 생기니 삭제하지 말고 ibus 프로세스만 기동되지 않도록 하는 방법을 찾을 필요가 있었다.

ibus를 삭제하면

우분투 14.04에서 ibus를 삭제하면 아래 스크린 샷과 같이 [시스템 설정] 메뉴가 대폭 사라지는 일이 생긴다.


원래의 [시스템 설정] 스크린 샷은 아래와 같다.


아래에서 알 수 있듯이 삭제 명령 실행시 ibus만 지워지는게 아니기 때문이다. 한마디로 ibus를 붙박이로 써라는 엉뚱하고도 고약한 패키지 dependency이다.

$ sudo apt-get remove ibus ibus-hangul
[sudo] password for aaa: 
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  libhangul-data libhangul1
Use 'apt-get autoremove' to remove them.
다음 패키지를 지울 것입니다:
  ibus ibus-hangul ibus-pinyin ibus-table ubuntu-desktop unity-control-center
  unity-control-center-signon webaccounts-extension-common xul-ext-webaccounts
0개 업그레이드, 0개 새로 설치, 9개 제거 및 0개 업그레이드 안 함.
이 작업 후 8,654 k바이트의 디스크 공간이 비워집니다.
계속 하시겠습니까? [Y/n] 
다시 복구하기 위해서 아래와 같이 하면 ibus와 ibus-hangul 두 개만 달랑 설치된다.

$ sudo apt-get install ibus ibus-hangul

아래와 같이하면 ibus도 같이 설치되고 [시스템 설정]도 원래의 상태가 된다.

$ sudo apt-get install ubuntu-desktop unity-control-center unity-control-center-signon webaccounts-extension-common xul-ext-webaccounts

로그인시 ibus 프로세스가 자동 시작 방지 및 uim 벼루 설치

ibus를 삭제하려던 원래 이유는 uim 벼루와 같은 다른 입력기를 테스트해 보기 위해서 였다.

예를 들어, uim/uim-byeoru를 아래와 같이 설치하고 나서,

$ sudo apt-get install uim uim-byeoru

[시스템 설정] > [언어 지원]에서 [키보드 입력기]를 uim으로 바꾸고 재로그인해도 ibus 프로세스들이 같이 떠 있다. 구글링해 보니 굳이 ibus를 지우지 않아도 ibus 프로세스가 로그인시 기동되지 않도록 하는 방법이 있었다.

$ gsettings set org.gnome.settings-daemon.plugins.keyboard active false

위와 같이하고 다시 로그인하면 더이상 ibus 프로세스가 기동되지 않는다.

추가적으로, 기존에 ibus 환경에서 <Shift>+<Space> 등의 키를 한영 변환키로 사용했는데 uim에서도 같은 키조합을 사용하려면 [시스템 설정] > [텍스트 입력창]에서 단축 키를 다른 키로 바꿔 주어야 한다. 단축 키에 대한 우선권이 거기에 있기 때문이다.

Unity 상단 패널의 키보드 indicator도 ibus에서만 사용하는 것이므로 안보이도록 설정하려면,

$ gsettings set com.canonical.indicator.keyboard visible false

uim에서 한영키를 등록하려면 uim-pref-gtk를 실행시켜서 [벼루 키 설정 1]에 한영키("hangul")를 추가해 주면 된다.

$ uim-pref-gtk

uim 벼루의 제약 사항

일단, 두가지 제약 사항이 있다. 하나는 Unity 상단 패널에 uim indicator가 등록되지 않아 한영 상태를 구분하기 어렵다는 것이고, 다른 하나는 Qt5 애플리케이션에서 한글입력이 안된다는 것이다.

참고로, Mint 17에서는 uim indicator가 정상 동작한다.