General TC > Programming & Scripting - Unofficial
Mount drives from desktop icons via iDesk
Misalf:
This script creates desktop icon files for use with iDesk to (u)mount drives listed in /mnt.
If such a desktop icon is clicked to mount/unmount a drive, the script will be executed too, rebuilds the icon files and kills/starts (kinda restarts) idesk.
I haven't looked into udev rules to automatically run the script upon inserting a usb stick. Might do so at some point.
NOTE: The script has to be edited manually with proper png images for Floppy, CD, and HDD because there are no default ones that would fit.
(I copied some from gnome-icon-theme and have them backed up in my ~/.local/share/icons folder)
(idesk.tcz from 5.x repo seems to work in 6.x - needs confirmation though)
I have idesk.tcz loaded OnBoot and the script starts via ~/.X.d/01-idesk-mount .
--- Code: ---[ $(which idesk) ] && idesk-mount.sh >/dev/null 2>&1 &
--- End code ---
idesk-mount.sh resides in ~/.local/bin .
--- Code: ---#!/bin/sh
# idesk-mount.sh for Tiny Core Linux
# Creates desktop icon files for use with iDesk to u/mount devices listed in /mnt.
# (c) Misalf 2015
#
WIDTH=32
HEIGHT=32
GAP=48
X_POS=16
Y_POS=64
TCUSER=`cat /etc/sysconfig/tcuser`
ICON_PATH="/home/$TCUSER/.local/share/icons"
ICON_CD="$ICON_PATH/optical-unmounted.png"
ICON_CD_MNT="$ICON_PATH/optical.png"
ICON_FD="$ICON_PATH/floppy.png"
ICON_FD_MNT="$ICON_PATH/floppy-unmounted.png"
ICON_USB="$ICON_PATH/removable.png"
ICON_USB_MNT="$ICON_PATH/removable-unmounted.png"
ICON_HDD="$ICON_PATH/hdd-unmounted.png"
ICON_HDD_MNT="$ICON_PATH/hdd.png"
ICON_HDD_LINUX="$ICON_HDD"
ICON_HDD_LINUX_MNT="$ICON_HDD_MNT"
ICON_HDD_WIN="$ICON_HDD"
ICON_HDD_WIN_MNT="$ICON_HDD_MNT"
[ -z "$FILEMGR" ] && FILEMGR=xfe # See ~/.profile
for i in `ls /mnt`
do
ICONFILE="/home/$TCUSER/.idesktop/$i.lnk"
FSTYPE_TAB=`cat /etc/fstab | grep $i | awk '{printf "%s\n", $3}'`
if [ -z "$FSTYPE_TAB" ]; then
[ -e "$ICONFILE" ] && rm "$ICONFILE" && echo -e "$i \t-REMOVED-"
continue
fi
FSTYPE_MNT=`df -T | grep $i | awk '{printf "%s\n", $2}'`
if [ -n "$FSTYPE_MNT" ]; then
MOUNTCMD=umount
case $i in
sr*) ICON="$ICON_CD_MNT" ;;
fd*) ICON="$ICON_FD_MNT" ;;
*)
case $FSTYPE_MNT in
ext*) ICON="$ICON_HDD_LINUX_MNT" ;;
*fat|ntfs*) ICON="$ICON_HDD_WIN_MNT" ;;
fuseblk)
ICON="$ICON_HDD_WIN_MNT"
[ -n "$FSTYPE_TAB" ] && FSTYPE_MNT="$FSTYPE_TAB"
;;
*) ICON="$ICON_HDD_MNT" ;;
esac
;;
esac
FSTYPE=" - $FSTYPE_MNT"
else
MOUNTCMD=mount
case $i in
sr*) ICON="$ICON_CD" ;;
fd*) ICON="$ICON_FD" ;;
*)
case $FSTYPE_TAB in
ext*) ICON="$ICON_HDD_LINUX" ;;
*fat|ntfs*) ICON="$ICON_HDD_WIN" ;;
*) ICON="$ICON_HDD" ;;
esac
;;
esac
[ "$FSTYPE_TAB" == "auto" ] && FSTYPE="" || FSTYPE=" - $FSTYPE_TAB"
fi
echo "table Icon" > "$ICONFILE"
FSSIZE_FULL=`df -h | grep $i | awk '{printf "%s", $2}'`
FSSIZE_USED=`df -h | grep $i | awk '{printf "%s", $3}'`
if [ "$MOUNTCMD" == "umount" ]; then
echo " Caption: [$i]" >> "$ICONFILE"
if [ "$FSSIZE_FULL" == "$FSSIZE_USED" ]; then
FSSIZE=" - ${FSSIZE_FULL}"
else
FSSIZE=" - ${FSSIZE_USED}/${FSSIZE_FULL}"
fi
else
echo " Caption: $i " >> "$ICONFILE"
FSSIZE=""
fi
echo " ToolTip.Caption: /mnt/$i${FSSIZE}${FSTYPE}" >> "$ICONFILE"
echo " Icon: $ICON" >> "$ICONFILE"
echo " Width: $WIDTH" >> "$ICONFILE"
echo " Height: $HEIGHT" >> "$ICONFILE"
echo " X: $X_POS" >> "$ICONFILE"
echo " Y: $Y_POS" >> "$ICONFILE"
echo " Command[0]: sudo $MOUNTCMD /dev/$i ; `basename $0`" >> "$ICONFILE"
[ -n "$FILEMGR" ] && echo " Command[1]: $FILEMGR /mnt/$i" >> "$ICONFILE"
echo "end" >> "$ICONFILE"
X_POS=$((X_POS+$GAP))
done
killall idesk >/dev/null 2>&1
idesk >/dev/null 2>&1 &
--- End code ---
The script is quite basic currently as my coding skills are not the greatest. But it certainly fits my own needs and reminds me a lot of Puppy Linux. (: However, I wrote it from scratch so don't expect anything too fancy.
This is my ~/.ideskrc (but you can safely use your own).
--- Code: ---table Config
FontName: terminus
FontSize: 9
FontColor: #615E5B
ToolTip.FontSize: 10
ToolTip.FontName: terminus
ToolTip.ForeColor: #FFB000
ToolTip.BackColor: #262624
ToolTip.CaptionOnHover: true
ToolTip.CaptionPlacement: Right
Locked: true
Transparency: 50
Shadow: true
ShadowColor: #0D0D0C
ShadowX: 1
ShadowY: 1
Bold: false
ClickDelay: 400
IconSnap: false
SnapWidth: 16
SnapHeight: 16
SnapOrigin: center
SnapShadow: true
SnapShadowTrans: 160
CaptionOnHover: false
CaptionPlacement: bottom
FillStyle: FillInvert
Background.Delay: 0
Background.Source: None
Background.File: None
Background.Mode: Stretch
Background.Color: #262624
CursorOver: ul_angle
end
table Actions
Lock: control middle singleClk
Reload: middle doubleClk
Drag: left hold
EndDrag: left singleClk
Execute[0]: left doubleClk
Execute[1]: right doubleClk
end
--- End code ---
Any recommendation very welcome.
Misalf:
As for the udev rules, got it working partially. The script will run for any USB device connected though (mouse etc). KERNEL=="sd*" doesn't seem to be used as I thought.
/etc/udev/rules.d/99-idesk-mount.rules
--- Code: ---SUBSYSTEM=="usb", ACTION=="add", \
ENV{DEVTYPE}=="usb_device", RUN+="/lib/udev/idesk-tcuser add &"
SUBSYSTEM=="usb", ACTION=="remove", \
ENV{DEVTYPE}=="usb_device", RUN+="/lib/udev/idesk-tcuser remove &"
--- End code ---
/lib/udev/idesk-tcuser
--- Code: ---#!/bin/sh
export DISPLAY=:0.0
TCUSER=`cat /etc/sysconfig/tcuser`
[ "$1" == "add" ] && SLEEP="5" || SLEEP="0.1"
/bin/su -c "sleep $SLEEP; /home/$TCUSER/.local/bin/idesk-mount.sh" "$TCUSER" &
--- End code ---
Rich:
Hi Misalf
Go to the search page and search for subsystem , you'll get about 30 results. Check the results that list subsystem== , they
may provide some useful information about udev usage.
Misalf:
Thanks Rich.
subsystem==block works better than subsystem==usb .
Also, when idesk was executed via udev, it was running as root I think. Icons were not click-able.
This should work:
/etc/udev/rules.d/99-idesk-mount.rules
--- Code: ---ACTION=="add|remove", SUBSYSTEM=="block", KERNEL=="sd[a-z]", \
RUN+="/bin/su -c '/lib/udev/idesk-tcuser &'"
--- End code ---
/lib/udev/idesk-tcuser
--- Code: ---#!/bin/sh
TCUSER=`/bin/cat /etc/sysconfig/tcuser`
/bin/su -c "/bin/sleep 1 ; DISPLAY=:0.0 /home/$TCUSER/.local/bin/idesk-mount.sh" - "$TCUSER" &
--- End code ---
Misalf:
I made a mistake in above script ; corrected.
Navigation
[0] Message Index
[#] Next page
Go to full version