Codebase list laptop-detect / c8661164-7811-4bca-8101-d99d7177294a/main laptop-detect.in
c8661164-7811-4bca-8101-d99d7177294a/main

Tree @c8661164-7811-4bca-8101-d99d7177294a/main (Download .tar.gz)

laptop-detect.in @c8661164-7811-4bca-8101-d99d7177294a/main

00ec5f8
 
 
 
 
 
 
 
22db44c
00ec5f8
 
 
 
22db44c
00ec5f8
 
 
22db44c
00ec5f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22db44c
 
 
 
00ec5f8
 
 
 
 
 
 
 
 
 
e1d812d
00ec5f8
 
22db44c
00ec5f8
 
 
 
e0145d9
b719140
00ec5f8
74bbf16
00ec5f8
6d9455a
 
 
 
 
22db44c
00ec5f8
 
 
 
 
 
ac832ef
b359de1
 
ac832ef
b359de1
22db44c
ac832ef
 
b359de1
22db44c
ac832ef
 
b359de1
22db44c
ac832ef
 
b359de1
22db44c
ac832ef
 
 
 
d47c050
f2e2d72
d47c050
 
 
 
 
 
 
 
 
 
 
22db44c
d47c050
 
8aacd71
 
00ec5f8
e1d812d
00ec5f8
e1d812d
22db44c
00ec5f8
 
 
8aacd71
00ec5f8
 
 
 
 
e1d812d
22db44c
00ec5f8
 
 
 
22db44c
#!/bin/sh -e

usage () {
    echo "Usage: $0 [-h|--help|-v|--verbose]"
    echo ""
    echo "  -h | --help      print this help"
    echo "  -v | --verbose   be verbose (messages go to STDOUT)"
    echo "  -V | --version   print version information"
    echo "  -D | --debug     debug mode"
    echo ""
    echo " Possible return values:"
    echo "  0  most likely running on a laptop"
    echo "  1  most likely NOT running on a laptop"
    echo "  2  called with unknown option, -h, --help, -V, --version, -D or --debug"
}

PRINTIT="/bin/true" # /bin/true accepts any option but never prints anything
EXIT="exit" # replaced in debug mode by /bin/true

# Check wether we were asked to be verbose

if [ "$1" != "" ]; then
    case "$1" in
        "-v"|"--verbose")
            PRINTIT="echo"
            ;;
        "-V"|"--version")
            echo "Version: @VERSION@"
            exit 2
            ;;
        "-h"|"--help")
            usage
            exit 2
            ;;
        "-D"|"--debug")
            EXIT="/bin/true"
            set -x
            ;;
        *)
            echo "UNKNOWN OPTION: $1"
            usage
            exit 2
            ;;
    esac
fi

# Are we a mac?
if test -d /proc/pmu; then
        batteries=$(grep Battery /proc/pmu/info | cut -f2 -d:)
        if test "$batteries" -ne 0; then
            $PRINTIT "We're a laptop (Mac: batteries found)" >&2;
            $EXIT 0
        fi
        exit 1
fi

if dmidecode="$(command -v dmidecode)" && [ -r /dev/mem -a -x "$dmidecode" ]
then
        # dmidecode to grab the Chassis type
        dmitype=$("$dmidecode" --string chassis-type)

        if test "$dmitype" = "Notebook" || \
           test "$dmitype" = "Portable" || \
           test "$dmitype" = "Laptop"   || \
           test "$dmitype" = "Hand Held"; then
            $PRINTIT "We're a laptop (dmidecode returned \"$dmitype\")" >&2
            $EXIT 0
        fi

        # turn back on for debugging
        #echo "$dmitype"
fi

if [ -e /sys/devices/virtual/dmi/id/chassis_type ] ; then
    chassis_type="$(cat /sys/devices/virtual/dmi/id/chassis_type)"
    case "$chassis_type" in
        8) # Portable
            $PRINTIT "We're a portable (chassis_type is $chassis_type)" >&2
            $EXIT 0
            ;;
        9) # Laptop
            $PRINTIT "We're a laptop (chassis_type is $chassis_type)" >&2
            $EXIT 0
            ;;
        10) # Notebook
            $PRINTIT "We're a notebook (chassis_type is $chassis_type)" >&2
            $EXIT 0
            ;;
        11) # Hand Held
            $PRINTIT "We're a hand held (chassis_type is $chassis_type)" >&2
            $EXIT 0
            ;;
    esac
fi

# check for non device ACPI batteries
/sbin/modprobe battery 2> /dev/null || true
sysfs_power_supply=/sys/class/power_supply
if [ -d $sysfs_power_supply ]; then
	for power_supply in $(ls $sysfs_power_supply)
	do
		if (
			grep -q Battery $sysfs_power_supply/$power_supply/type 2>/dev/null
		) && (
			! grep -q Device $sysfs_power_supply/$power_supply/scope 2>/dev/null
		)
		then
			$PRINTIT "We're a laptop (non device ACPI batteries found)" >&2
			$EXIT 0
		fi
	done
fi
# old interface:
if [ -d /proc/acpi/battery ]; then
        results=`find /proc/acpi/battery -mindepth 1 -type d`
        if [ ! -z "$results" ]; then
            $PRINTIT "We're a laptop (ACPI batteries found)" >&2
            $EXIT 0
        fi
fi


# check for APM batteries. This sucks, because we'll only get a valid response
# if the laptop has a battery fitted at the time
if [ -f /proc/apm ]; then
    battery=`awk '{print $6}' </proc/apm`
    if [ "$battery" != "0xff" ] && [ "$battery" != "0x80" ]; then
        $PRINTIT "We're a laptop (APM batteries found)" >&2
        $EXIT 0
    fi
fi

$PRINTIT "We're not on a laptop (no relevant hint found)" >&2
$EXIT 1