Sample Fn-F7 script

From ThinkWiki
Revision as of 17:41, 9 November 2007 by Seva (Talk | contribs) (←Created page with 'Tested on ThinkPad X60s running Fedora 8 Create /etc/acpi/events/thinkpad.conf: <code> # fn-F7 event=ibm/hotkey HKEY 00000080 00001007 action=/usr/local/sbin/thinkpad-f7...')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Tested on ThinkPad X60s running Fedora 8

Create /etc/acpi/events/thinkpad.conf:

  1. fn-F7

event=ibm/hotkey HKEY 00000080 00001007 action=/usr/local/sbin/thinkpad-f7

Create /usr/local/sbin/thinkpad-f7:

  1. !/bin/sh

DO=$(basename $0)

SU="su $(w -h -s | grep ":[0-9]" | head -1 | awk '{print $1}') -c" export DISPLAY=$(w -h -s | grep ":[0-9]" | head -1 | awk '{print $3}')

STATE_FILE=/var/lib/thinkpad/screen.state; if [ ! -e $STATE_FILE ]; then

       echo "internal" > $STATE_FILE

fi

STATE=$(cat $STATE_FILE)

function screen_external(){

       $SU "xrandr --output LVDS --off"
       $SU "xrandr --output VGA --mode 1600x1200 --left-of LVDS"
       echo "external" > $STATE_FILE

}

function screen_internal(){

       $SU "xrandr --output VGA --off"
       $SU "xrandr --output LVDS --mode 1024x768 --right-of VGA"
       echo "internal" > $STATE_FILE

}

function screen_both(){

       $SU "xrandr --output VGA --mode 1600x1200 --left-of LVDS"
       $SU "xrandr --output LVDS --mode 1024x768 --right-of VGA"
       echo "both" > $STATE_FILE

}

case "$DO" in

       thinkpad-toggle | thinkpad-f7)
               case "$STATE" in
                       internal)
                               screen_external
                               ;;
                       external)
                               screen_both
                               ;;
                       both)
                               screen_internal
                               ;;
                       *)
                               screen_internal
                               ;;
               esac
               ;;
       thinkpad-dock)
               screen_internal
               ;;
       thinkpad-undock)
               screen_external
               ;;
       *)
               echo "usage: rename to thinkpad-dock, thinkpad-undock, or thinkpad-toggle" >&2
               ;;

esac

As root,

mkdir -p /var/lib/thinkpad echo "internal" > /var/lib/thinkpad/screen.state chmod 755 /usr/local/sbin/thinkpad-f7 service acpid restart