Results 1 to 7 of 7

Thread: USB devices that power off in Linux

  1. #1
    pkg
    pkg is offline
    Low Bitrate pkg's Avatar
    Join Date
    Apr 2005
    Location
    Arizona
    Posts
    96

    USB devices that power off in Linux

    Now that I have my touchscreen working I am seeing the next piece of the puzzle.

    When my LCD (and touchscreen controller) power off and my computer is still running, the touchscreen controller does not come back to the system when I power the lcd back on.

    This seems to be seen with other devices like USB printers in Linux. Does any of you know how to keep this from happening? I am running Debian Sarge, 2.6.8 kernel, hotplug.

    Thanks,
    Paul
    -pkg

    Check out my tC: http://publicjestering.com/tc
    Check out my site: http://publicjestering.com

  2. #2
    Newbie
    Join Date
    Dec 2004
    Posts
    48
    might have to make a script for hotplug to autodetect usb plug/unplug I had to do this in gentoo with a usb thumbdrive

  3. #3
    pkg
    pkg is offline
    Low Bitrate pkg's Avatar
    Join Date
    Apr 2005
    Location
    Arizona
    Posts
    96
    Quote Originally Posted by DigitalExpl0it
    might have to make a script for hotplug to autodetect usb plug/unplug I had to do this in gentoo with a usb thumbdrive

    Do you have a copy that you can post here? Also, do you have to run it manually each time?

    Thanks,
    -pkg

    Check out my tC: http://publicjestering.com/tc
    Check out my site: http://publicjestering.com

  4. #4
    Newbie
    Join Date
    Dec 2004
    Posts
    48
    ill see if I cant get it and no its all auto

  5. #5
    Newbie
    Join Date
    Dec 2004
    Posts
    48
    it uses the automount hotplug so here is the script may need tweaking

    #!/bin/sh
    #
    # Automount hotplugged block devices, by Wout Mertens ([email protected])
    #
    # Linux v2.6 version
    # This script is released under version 2 of the GPL.

    # To install this, either make it /sbin/hotplug, or, if you have
    # linux-hotplug installed, make it /etc/hotplug.d/block/automount.hotplug .
    # It needs to be executable. I tested it with busybox's ash.
    #
    # The devices will be mounted for the console user if applicable.
    #
    # To work, this needs:
    # - v2.6 kernel support:
    # - hotplugging, /proc mounted, /sys mounted
    # - filesystems that will be mounted, like vfat
    # - sh, echo, sed, stat or ls, getent or grep passwd,
    # mount, umount, mkdir, rmdir. logger is used if there.
    #
    # Possible improvements:
    # - Call a notifier script when mounting/unmounting. This could create the
    # desktop entry by itself.
    # - Edit fstab instead, and give the "user" option. This depends more on
    # the user/desktop knowing what he/it is doing.

    # Changelog:
    #
    # - 2005-03-26 Mark Burazin ([email protected])
    # - Multiple partitions are now correctly created as separate icons
    #
    # - 2005-03-20 Mark Burazin ([email protected])
    # - Creation of desktop entry under /home/(current user)/Desktop
    # - use supermount and subfs successfuly.
    # - Solve bug where sometimes the icons were not deleted (problem was in spaces
    # which were in some names eg. "JUMPDRIVE " -> "JUMPDRIVE")
    # - Another issue of the delete bug is when the usb is quicker and we don't
    # know the device name. There is a solution, but You must uncomment the "usbbug" line
    # - allow a definition for using diffrent icons for diffrent drives check the
    # PRODUCTS_* variables.

    # Debugging
    # set -xv
    # exec > /tmp/hotplug.$$ 2>&1

    # Configuration
    ICON_PATH=/usr/kde/3.3/share/icons/default.kde/scalable/devices
    PATH="/bin:/sbin:/usr/bin:/usr/sbin"
    export PATH

    # We only handle block device messages
    [ "$1" != "block" ] && exit 0

    # Proclaim stuff to the world
    mesg () {
    logger -t $0 "$*"
    }

    # Is path already mounted?
    is_path_mounted () {
    while read dev path rest
    do
    if [ "$path" = "$1" ]
    then
    return 0
    fi
    done < /proc/self/mounts
    return 1
    }

    # Get mounted path for a device
    get_mounted_path () {
    while read dev path rest
    do
    if [ "$dev" = "$1" ]
    then
    echo "$path"
    return 0
    fi
    done < /proc/self/mounts
    return 1
    }
    get_product_info () {
    # Here You can setup which are the default
    # icons
    ICON_HDD=hdd_mount.svgz
    ICON_USBPENDRIVE=usbpendrive_mount.svgz
    ICON_DEFAULT=$ICON_USBPENDRIVE
    # And which icons to assign to which product id's, joust remove
    # spaces from the name eg. "SOME USB DRIVE" -> "SOMEUSBDRIVE"
    # and leave it surrounded by ":"
    PRODUCTS_USBPENDRIVE=":JUMPDRIVE:"
    PRODUCTS_HDD=":B200P0:24320:USBMSReader:USBCFReade r:"
    # Find the name
    PRODUCT=`cat /sys/$1/$2/device/model`
    if [ -z "$PRODUCT" ]
    then
    PRODUCT=generic
    else
    PRODUCT=`echo $PRODUCT | sed 's/ //g'`
    fi
    # Find the vendor
    VENDOR=`cat /sys/$1/$2/device/vendor`
    if [ -z "$VENDOR" ]
    then
    VENDOR=vendor
    else
    VENDOR=`echo $VENDOR | sed 's/ //g'`
    VENDOR=`echo $VENDOR | sed 's/-//g'`
    fi

    # Find out who we are going to mount it as
    CONSOLEUSER=`stat -c%U /dev/console 2>/dev/null`
    if [ -z "$CONSOLEUSER" ]
    then
    set `ls -l /dev/console`
    CONSOLEUSER=$3
    fi
    [ -n "$CONSOLEUSER" ] || CONSOLEUSER=root
    PASSWD=`getent passwd $CONSOLEUSER 2>/dev/null`
    if [ -z "$PASSWD" ]
    then
    PASSWD=`grep "$CONSOLEUSER" /etc/passwd||grep root /etc/passwd`
    fi
    if [ -z "$PASSWD" ]
    then
    mesg "Could not get password entry for $CONSOLEUSER"
    exit 1
    fi
    set `echo $PASSWD | sed 's/:/ /g'`
    if [ $# -lt 4 ]
    then
    mesg "Bad password entry for $CONSOLEUSER"
    exit 1
    fi
    USERID=$3
    USERGID=$4


    # if we have a quick usb unplug (can't determine product)
    # then we need to find the icons by device and delete them.
    if [ "$ACTION" = "remove" && $PRODUCT = "generic" ]
    then
    set `grep -l -e"$DEVICE" /home/$CONSOLEUSER/Desktop/*.desktop`
    if [ $# -lt 1 ]
    then
    # this solves the usbbug, uncomment to allow this feature, but be careful
    mesg "Deleting stale icon...$#"
    rm /home/$CONSOLEUSER/Desktop/$#.desktop
    fi
    fi

    #uncomment this so You can see the name for PRODUCTS_* variables
    #mesg "Searching for product: ->$PRODUCT<-"

    # Find the icon type
    if [ ! -z `echo $PRODUCTS_USBPENDRIVE | grep -e:$PRODUCT:` ]
    then
    ICON_USE=$ICON_USBPENDRIVE
    elif [ ! -z `echo $PRODUCTS_HDD | grep -e:$PRODUCT:` ]
    then
    ICON_USE=$ICON_HDD
    else
    ICON_USE=$ICON_DEFAULT
    fi


    }

    # Wait for a file to appear
    wait_for () {
    local count=0
    while [ $count -lt 10 ] && [ ! -e "$1" ]
    do
    sleep 1
    done
    [ $count -eq 10 ] && return 1
    return 0
    }

    # Remove strange characters from a filename
    clean_filename () {
    # Note the lack of quotes around $1, this strips off spaces.
    echo $1 | sed 's/[ /?*\"<>]/_/g'
    }

    # Figure out the device to mount
    set `echo $DEVPATH | sed 's/\// /g'`
    [ $# -ne 3 ] && exit 0
    DEVICE=/dev/$3

    if [ "$ACTION" = "remove" ]
    then
    # Is it ours?
    dir=`get_mounted_path $DEVICE`
    echo "$dir" | grep -q ^/mnt/usb || exit 0

    get_product_info $1 $2 $ACTION $DEVICE

    # Unmount it
    [ -d "$dir" ] || exit 1
    umount -lf "$dir"
    rmdir "$dir"
    # remove the desktop icon
    mesg Unmounting $DEVICE, $dir $PRODUCT for user $CONSOLEUSER
    SDEV=`echo $DEVICE | sed 's/\///g'`
    rm "/home/$CONSOLEUSER/Desktop/$SDEV.desktop"
    exit 1
    fi

    if [ "$ACTION" = "add" ]
    then
    # Is it a usb device? Exit if not.
    ls -l /sys/$1/$2/device | sed 's/^.* -> //g' | grep -q usb || exit 0

    # Mount it

    # Make sure we have support for vfat
    modprobe -q vfat

    wait_for /sys/$1/$2/device/vendor || exit 1


    get_product_info $1 $2 $ACTION

    # Find out where we mount it
    MOUNTPATH=/mnt/usb/`clean_filename "$PRODUCT"`
    if is_path_mounted "$MOUNTPATH"
    then
    count=1
    while is_path_mounted "${MOUNTPATH}_${count}"
    do
    count=$(( $count + 1 ))
    done
    MOUNTPATH="${MOUNTPATH}_${count}"
    PRODUCT="${PRODUCT}_${count}"
    fi
    # Make sure it's a directory
    if [ -e "$MOUNTPATH" ]
    then
    if [ ! -d "$MOUNTPATH" ]
    then
    mesg "$MOUNTPATH exists but is not a directory"
    exit 1
    fi
    else
    mkdir -p "$MOUNTPATH"
    if [ $? -ne 0 ]
    then
    mesg "Could not create mountpoint $MOUNTPATH"
    exit 1
    fi
    fi

    # These options should prevent abuse and make it writeable for the
    # console user.
    if grep -q subfs /proc/filesystems
    then
    MOUNTOPTS="-s -t subfs -o fs=vfat:ext3:ext2:reiserfs,noatime,nosuid,umask=07 7,uid=$USERID,gid=$USERGID"
    elif grep -q supermount /proc/filesystems
    then
    MOUNTOPTS="-s -t supermount -onoatime,nosuid,umask=077,uid=$USERID,gid=$USERGID "
    else
    #MOUNTOPTS="-s -onoatime,sync,dirsync,nosuid,umask=077,uid=$3,gid= $4"
    MOUNTOPTS="-s -onoatime,sync,user,exec,umask=0000"
    fi
    mesg Mounting $DEVICE on $MOUNTPATH, options $MOUNTOPTS $ICON_USE

    mount $MOUNTOPTS $DEVICE $MOUNTPATH

    # Everything was mounted fine, create a Desktop icon
    SDEV=`echo $DEVICE | sed 's/\///g'`
    OUTPUTFILE="/home/$CONSOLEUSER/Desktop/$SDEV.desktop"
    echo "[Desktop Entry]" > $OUTPUTFILE
    echo "Version=1.0" >> $OUTPUTFILE
    echo "Name=$VENDOR $PRODUCT" >> $OUTPUTFILE
    echo "Encoding=UTF-8" >> $OUTPUTFILE
    echo "Type=Link" >> $OUTPUTFILE
    echo "URL=$MOUNTPATH" >> $OUTPUTFILE
    echo "Dev=$DEVICE" >> $OUTPUTFILE
    echo "Icon=$ICON_PATH/$ICON_USE" >> $OUTPUTFILE

    chmod 777 $OUTPUTFILE
    chown $CONSOLEUSER $OUTPUTFILE
    chgrp users $OUTPUTFILE
    fi
    exit
    thread here
    http://forums.gentoo.org/viewtopic-t...-start-50.html

    its for usb thumb drives but should work for any usb devices
    this script has been modded by alot of people.

    also you need udev support in the kernel for this

  6. #6
    pkg
    pkg is offline
    Low Bitrate pkg's Avatar
    Join Date
    Apr 2005
    Location
    Arizona
    Posts
    96
    Thanks for posting the script.

    I will need to modify the script for the touchscreen but the script will probably be simplified since it is a non-storage device. I will post the modified script here when i get it done.

    Thanks again,
    -pkg

    Check out my tC: http://publicjestering.com/tc
    Check out my site: http://publicjestering.com

  7. #7
    Newbie
    Join Date
    Dec 2004
    Posts
    48
    ya theres alot of code that can be ripped out. Might re-write the script but grab some of the code from this script

Similar Threads

  1. Cutting power to USB after computer has shutdown
    By lookinco in forum Power Supplies
    Replies: 61
    Last Post: 05-17-2006, 02:05 PM
  2. How to cut usb power when in standby
    By Goddy in forum General Hardware Discussion
    Replies: 2
    Last Post: 03-14-2005, 03:28 PM
  3. Opus 90W w/ hardwired USB devices
    By beckkl in forum Power Supplies
    Replies: 0
    Last Post: 10-13-2004, 06:20 PM
  4. usb power problem: solved!
    By susman in forum General Hardware Discussion
    Replies: 16
    Last Post: 08-31-2004, 02:50 AM
  5. are usb 2.0 devices able to work with usb 1.1 hubs?
    By chris in nh in forum General Hardware Discussion
    Replies: 9
    Last Post: 06-28-2004, 08:27 PM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •