* [http://live.gnome.org/ProjectUtopia GnomeLive의 Project Utopia 페이지]
 * [http://primates.ximian.com/~rml/project-utopia/ Robert Love 씨의 유토피아 프로젝트]
 * [http://people.redhat.com/johnp/redhat/experimental/utopia/i386 John Palmieri 씨의 Fedora용 RPM 모음]
 * 리눅스 데스크탑에서 연결/제거 가능한 장치를 자동으로 구성해주는 환경을 만드는 프로젝트이다.
 * 리눅스 2.6 + dbus messaging system + Hal + Gnome Desktop
=  유토피아의 구성  =
 * 리눅스 2.6
 * sysfs
 * 리눅스 2.6에서는 하드웨어의 정보를 일반화시켜서 볼 수 있는 sysfs가 추가되었다.
 * proc에서 subsystem마다 각기 따로 관리하던 정보를 단일하고 일반화된 방식으로 접근이 가능하다.
 * 현재 시스템에서 동작되고 있는 장치들을 물리적, 또는 논리적인 구조로 원하는 방향에서 찾아 볼수 있다.
 * 아래에서 시스템에서 동작하고 있는 ide인터페이스 장치들을 물리적인 구조및 논리적인 구조로 보여주고 있다.
 * 또한 서로의 정보가 심볼릭 링크가 되어 있어서 관련 정보를 쉽게 얻을 수 있다.
{{{
ganadist@ganadist sys $ tree -d devices/pci0000\:00/0000\:00\:09.0
devices/pci0000:00/0000:00:09.0
|-- ide0
|   |-- 0.0
|   |   |-- block -> ../../../../../block/hda
|   |   `-- power
|   |-- 0.1
|   |   |-- block -> ../../../../../block/hdb
|   |   `-- power
|   `-- power
`-- power
ganadist@ganadist sys $ tree -d block/hd*
block/hda
|-- device -> ../../devices/pci0000:00/0000:00:09.0/ide0/0.0
|-- hda1
|-- hda10
|-- hda11
|-- hda12
|-- hda2
|-- hda5
|-- hda6
|-- hda7
|-- hda8
|-- hda9
`-- queue
`-- iosched
block/hdb
|-- device -> ../../devices/pci0000:00/0000:00:09.0/ide0/0.1
|-- hdb1
|-- hdb2
|-- hdb5
|-- hdb6
|-- hdb7
`-- queue
`-- iosched
}}}
 * [LinuxHotplug]
 * 커널 2.4에서 일부 시스템(usb, ieee1394, pci)에서만 적용되던 [LinuxHotplug]가 subsystem 전체(block, net, scsi_host, scsi_device, input, etc)에 적용되게 되었다.
 * hotplug 이벤트가 발생할 때 sysfs의 경로를 가리켜서 새로 연결된 장치의 정보를 참조할 수 있도록 한다.
 * [ProjectUtopia]에서는 3가지의 hotplug agent가 실행된다.
 * linux-hotplug agent : 기존의 리눅스 2.4에서 쓰이던 hotplug agent이다. 필요한 커널 모듈을 커널에 적재하며 필요한 쉘 스크립트를 실행한다.
 * udev agent : 새로 연결된 장치에 접근할 수 있는 장치노드를 사용자 설정에 따라 만든다.
 * hal agent : 새로 연결된 장치에 대한 정보를 dbus를 통해 시스템 전체에 알린다.
 * [http://freedesktop.org/software/dbus D-BUS Message Bus System]
 * 데스크탑 프로그램들을 위한 IPC(interprocess communication) 시스템
 * dbus-daemon은 -system 모드와 -session 모드로 동작한다.
 * system모드로 시작한 데몬은 하드웨어 추가/제거 또는 프린트 큐 상태 같은 시스템 전체 메세지를 전달하며 모든 사용자가 접근 가능하다.
 * session모드로 시작한 데몬은 세션 데몬의 주소를 반환하며 그 세션에서 실행되는 프로그램 사이의 IPC메세지를 전달 할 수 있다.
 * c, c++, c#, java, python 등의 여러가지 언어 바인딩이 제공되어 진다.
 * [http://freedesktop.org/software/hal Hardware Abstraction Layer]
 * 다양한 OS상에서 각종 하드웨어의 상태를 동일한 인터페이스로 접근 가능하게 하는 Framework
 * dbus를 이용하여 현재 하드웨어의 연결,제거 또는 상태에 대한 정보를 얻어낼 수 있다.
 * 현재는 hal agent가 리눅스 2.6에서만 구현되어 있다. hal agent만 구현되면 다른 OS에서도 동작이 가능하다.
http://ftp.mizi.com/~ganadist/hal-device-manager.png
 * Gnome Volume Manager
 * HAL에서 전달된 메세지를 파악해서 시스템에 연결된 디스크 장치를 자동으로 마운트, 또는 필요한 프로그램을 실행한다.
http://ftp.mizi.com/~ganadist/gnome-volume-properties.png

----
CategoryProject