[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[plamo:28669] Re: Plamo 4.22 (10/15 Ver.)でUSBストレージが自動検出来ない
-
From:KOJIMA Mitsuhiro
-
Date:Sun, 2 Dec 2007 10:52:28 +0900 (JST)
- Subject: [plamo:28669] Re: Plamo 4.22 (10/15 Ver.)でUSBストレージが自動検出来ない
- From: KOJIMA Mitsuhiro <kojima@xxxxxxxxxxx>
- Date: Sun, 02 Dec 2007 10:22:23 +0900 (JST)
From: KOJIMA Mitsuhiro <kojima@xxxxxxxxxxx>
Subject: [plamo:28659] Re: Plamo 4.22 (10/15 Ver.) で USB ストレージが自動検出来ない
Date: Fri, 30 Nov 2007 09:28:37 +0900 (JST)
> 詳しくは調べてないけど,デスクトップ環境に依存せず udev rules のレベル
> で頑張るのが一番汎用的になるんじゃないかな?
>
> USB なり,フラッシュなりが挿された時に sysfs 経由でどういう情報が飛んで
> くるかがわかれば,udevd がそれに応じた操作をするようなシェルスクリプト
> を起動するみたいなこともできたと思うので.
少し調べてみました.元ネタは http://gentoo-wiki.com/UDEV のあたり.
1) /etc/udev/rules.d/50-udev.rules に
# mount block device when added
SUBSYSTEM=="block", ACTION=="add", RUN+="/usr/local/bin/mount-device.sh /dev/%k"
SUBSYSTEM=="block", ACTION=="remove", RUN+="/bin/umount /dev/%k"
という記述を追加して udevcontrol reload_rules を実行
2) /usr/local/bin/mount-device.sh として以下のようなスクリプトを用意
---------------------
#!/bin/sh
DEVICE="$1"
GID=`grep plugdev /etc/group | cut -d: -f 3`
if [ "$DEVICE" = "" ] ; then exit 1 ; fi
# wait a moment till' hal has information about the device
sleep 2
HAL_UDI=`hal-find-by-property --key block.device --string "$DEVICE"`
function get_hal_label {
CUR_UDI=$1
LABEL=""
COUNTER=0;
while [ -z "$LABEL" -a $COUNTER -lt 4 ]; do
LABEL=`hal-get-property --key volume.label --udi "$CUR_UDI" 2>/dev/null`
if [ -z "$LABEL" ]; then
LABEL=`hal-get-property --key storage.serial --udi "$CUR_UDI" 2>/dev/null`
fi
CUR_UDI=`hal-get-property --key info.parent --udi "$CUR_UDI" 2>/dev/null`
let COUNTER=COUNTER+1
done
if [ -z $LABEL ]; then
LABEL=${DEVICE##/dev/}
fi
}
function get_hal_removable {
CUR_UDI=$1
REMOVABLE=""
COUNTER=0
while [ -z "$REMOVABLE" -a $COUNTER -lt 4 ]; do
REMOVABLE=`hal-get-property --key storage.removable --udi "$CUR_UDI" 2>/dev/null`
if [ -z "$REMOVABLE" ]; then
BUS=`hal-get-property --key storage.bus --udi "$CUR_UDI" 2>/dev/null`
if [ "$BUS" = "usb" ]; then
REMOVABLE="true"
fi
fi
CUR_UDI=`hal-get-property --key info.parent --udi "$CUR_UDI" 2>/dev/null`
let COUNTER=COUNTER+1
done
if [ -z "$REMOVABLE" ]; then
logger "assuming $HAL_UDI is removable for safety reasons"
REMOVABLE="true"
fi
}
if [ -z "$HAL_UDI" ]; then # can't find device in hal db
logger "hald didn't know about $DEVICE"
LABEL=${DEVICE##/dev/}
else # device found in hal db.
get_hal_label "$HAL_UDI"
get_hal_removable "$HAL_UDI"
fi
logger "Mounting HAL_UDI $HAL_UDI as $DEVICE to $LABEL (removable: $REMOVABLE)"
SYNC_OPT=""
if [ $REMOVABLE = "true" ]; then
SYNC_OPT="--sync"
fi
#pmount --umask 007 $SYNC_OPT "$DEVICE" "$LABEL"
# if you do not want to use pmount (why should you?)
MOUNTPOINT=/media/${LABEL}
mkdir -p "$MOUNTPOINT" &&
touch "$MOUNTPOINT"/.created_by_pmount &&
mount "$DEVICE" "$MOUNTPOINT" -o uid=1000,gid=100,umask=007 ||
rm "$MOUNTPOINT"/.created_by_pmount &&
rmdir "$MOUNTPOINT"
--------------
一応,これぐらいで,USB なメモリを挿せば自動的に /media/sdc1 等にマウン
トしてくれる模様.ただ,HAL との連携がうまくいっていないようで GNOME の
デスクトップに自動的にアイコンが出てくる,みたいなのは実現できてないで
す.
なぜうまくいってないかもある程度は追いかけていて,上記スクリプト中の
HAL_UDI=`hal-find-by-property --key block.device --string "$DEVICE"`
という部分で挿した USB メモリの HAL_UDI を調べているのだけど,手元の
HAL の環境では hal-device で調べても USB なフラッシュには block.device
というプロパティが無いため,デバイスの HAL_UDI が取れてないのが原因っぽ
いのですが,どういう風に対応するのがいいかは不明です.
# HAL のバージョンとかに関係してたりするのだろうか?
------
こじま
[検索ページ]
[メール一覧]
Plamo ML 公開システム