Using external programs to name devices


어떤 경우에는 표준 udev 규칙들에서 제공하는 것보다 더 많은 것을 필요로 할 수 있습니다. 이럴 때 여러분들은 udev를 사용하여 다른 프로그램을 실행하거나 디바이스의 이름을 정하기 위한 프로그램의 표준 출력을 사용할 수도 있습니다. 이 기능을 사용하기 위해선 규칙 속성 중 PROGRAM assignment에 실행 할 프로그램의 절대 경로를 명시하거나 NAME/SYMLINK assignment에 %c 치환을 조금 변형하여 사용할 수 있습니다.


아래 예제는 “/bin/device_namer” 이라는 가상의 프로그램을 언급하고 있습니다. device_namer는 디바이스에 대한 커널의 이름을 하나의 command line 인자로 사용합니다. 이 커널 이름을 기반으로 device_namer는 여러 부분으로 나뉘어 표준 출력 파이프로  출력을 내보내는 일을 합니다. 각 부분은 하나의 단어이고 각 파트들은 공백으로 나뉘어집니다.


첫 번째 예제에서 우리는 device_namer의 출력들을 이용해 임의의 디바이스들의 심볼릭 링크를 만들기 위한 것입니다.


KERNEL=="hda", PROGRAM="/bin/device_namer %k", SYMLINK+="%c"


다음 예제는 device_namer의 출력을 두 부분으로 나눈 것 입니다. 첫 째는 디바이스 네임이고, 두 번째 부분은 추가적인 심볼릭 링크입니다. %c{N} 치환법을 이용하여  N개의 출력이 가능함을 볼 수 있습니다.


KERNEL=="hda", PROGRAM="/bin/device_namer %k", NAME="%c{1}", SYMLINK+="%c{2}"


다음 예제는 device_namer의 출력이 디바이스 이름에 대해 추가적인 심볼릭 링크를 형성 할 부분의 수가 계속되는 예제입니다. 현재 출력이 끝날 때 까지 %c{N+} 치환법에 의해 N개의 부분으로 형성된다.


KERNEL=="hda", PROGRAM="/bin/device_namer %k", NAME="%c{1}", SYMLINK+="%c{2+}"


출력 부분은 NAME, SYMLINK 뿐만 아니라 다른 assignment key를 사용하여도 출력할 수 있습니다. 다음 예제는 디바이스를 소유하고 있는 Unix 그룹을 확인하는 가상의 프로그램을 사용하기 위한 예제입니다.


KERNEL=="hda", PROGRAM="/bin/who_owns_device %k", GROUP="%c"