<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Foton2</id>
	<title>ThinkWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Foton2"/>
	<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/wiki/Special:Contributions/Foton2"/>
	<updated>2026-05-01T12:20:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Sample_Fn-F7_script&amp;diff=34746</id>
		<title>Sample Fn-F7 script</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Sample_Fn-F7_script&amp;diff=34746"/>
		<updated>2007-11-21T09:39:59Z</updated>

		<summary type="html">&lt;p&gt;Foton2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide will help you configure Fn-F7 key combination to toggle between internal, mirror, external, or both screens.  This was tested on ThinkPad X60s running Fedora 8, please comment if it works or does not work for you.&lt;br /&gt;
&lt;br /&gt;
Works like a charm on X61s with Xubuntu 7.10.&lt;br /&gt;
&lt;br /&gt;
Add a &amp;quot;Virtual&amp;quot; statement to your /etc/X11/xorg.conf, the total resolution should be large enough to fit all your screens in the configuration you want, for example if you have 1600x1200 monitor to the left of your internal 1024x768 monitor, your total max resolution is 2624x1200 (See [[Xorg RandR 1.2]] for more details):&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
        Identifier &amp;quot;Screen0&amp;quot;&lt;br /&gt;
        Device     &amp;quot;Videocard0&amp;quot;&lt;br /&gt;
        DefaultDepth     24&lt;br /&gt;
        SubSection &amp;quot;Display&amp;quot;&lt;br /&gt;
                Viewport   0 0&lt;br /&gt;
                Depth     24&lt;br /&gt;
                &amp;lt;b&amp;gt;Virtual   2624 1200&amp;lt;/b&amp;gt;&lt;br /&gt;
        EndSubSection&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
Restart X server at this point (i.e. logout and login).&lt;br /&gt;
&lt;br /&gt;
Create /etc/acpi/events/thinkpad.conf:&lt;br /&gt;
&lt;br /&gt;
 event=ibm/hotkey HKEY 00000080 00001007&lt;br /&gt;
 action=/usr/local/sbin/thinkpad-fn-f7&lt;br /&gt;
&lt;br /&gt;
Note the names of your output devices as you will have to change EXTERNAL_OUTPUT and INTERNAL_OUTPUT to what xrandr shows, for example VGA and LVDS in this case:&lt;br /&gt;
&lt;br /&gt;
 $ xrandr | grep connected&lt;br /&gt;
 '''VGA''' connected 1600x1200+0+0 (normal left inverted right x axis y axis) 432mm x 324mm&lt;br /&gt;
 '''LVDS''' connected (normal left inverted right x axis y axis)&lt;br /&gt;
&lt;br /&gt;
Create /usr/local/sbin/thinkpad-fn-f7, you can set EXTERNAL_LOCATION to one of: left, right, above, or below.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 # External output may be &amp;quot;VGA&amp;quot; or &amp;quot;VGA-0&amp;quot; or &amp;quot;DVI-0&amp;quot;&lt;br /&gt;
 EXTERNAL_OUTPUT=&amp;quot;'''VGA'''&amp;quot;&lt;br /&gt;
 INTERNAL_OUTPUT=&amp;quot;'''LVDS'''&amp;quot;&lt;br /&gt;
 EXTERNAL_LOCATION=&amp;quot;'''left'''&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Figure out which user and X11 display to work on&lt;br /&gt;
 # TODO there has to be a better way to do this?&lt;br /&gt;
 X_USER=$(w -h -s | grep &amp;quot;:[0-9]&amp;quot; | head -1 | awk '{print $1}')&lt;br /&gt;
 export DISPLAY=$(w -h -s | grep &amp;quot;:[0-9]&amp;quot; | head -1 | awk '{print $3}')&lt;br /&gt;
 &lt;br /&gt;
 # Switch to X user if necessary&lt;br /&gt;
 if [ &amp;quot;$X_USER&amp;quot; != &amp;quot;$USER&amp;quot; ]; then&lt;br /&gt;
        SU=&amp;quot;su $X_USER -c&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 case &amp;quot;$EXTERNAL_LOCATION&amp;quot; in&lt;br /&gt;
        left|LEFT)&lt;br /&gt;
                EXTERNAL_LOCATION=&amp;quot;--left-of $INTERNAL_OUTPUT&amp;quot;&lt;br /&gt;
                ;;&lt;br /&gt;
        right|RIGHT)&lt;br /&gt;
                EXTERNAL_LOCATION=&amp;quot;--right-of $INTERNAL_OUTPUT&amp;quot;&lt;br /&gt;
                ;;&lt;br /&gt;
        top|TOP|above|ABOVE)&lt;br /&gt;
                EXTERNAL_LOCATION=&amp;quot;--above $INTERNAL_OUTPUT&amp;quot;&lt;br /&gt;
                ;;&lt;br /&gt;
        bottom|BOTTOM|below|BELOW)&lt;br /&gt;
                EXTERNAL_LOCATION=&amp;quot;--below $INTERNAL_OUTPUT&amp;quot;&lt;br /&gt;
                ;;&lt;br /&gt;
        *)&lt;br /&gt;
                EXTERNAL_LOCATION=&amp;quot;--left-of $INTERNAL_OUTPUT&amp;quot;&lt;br /&gt;
                ;;&lt;br /&gt;
 esac&lt;br /&gt;
 &lt;br /&gt;
 # Figure out current state&lt;br /&gt;
 INTERNAL_STATE=$($SU xrandr | grep ^$INTERNAL_OUTPUT | grep con | sed &amp;quot;s/.*connected //&amp;quot; | sed &amp;quot;s/(.*//&amp;quot;)&lt;br /&gt;
 EXTERNAL_STATE=$($SU xrandr | grep ^$EXTERNAL_OUTPUT | grep con | sed &amp;quot;s/.*connected //&amp;quot; | sed &amp;quot;s/(.*//&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 if [ -z &amp;quot;$INTERNAL_STATE&amp;quot; ]; then&lt;br /&gt;
        STATE=&amp;quot;external&amp;quot;&lt;br /&gt;
 elif [ -z &amp;quot;$EXTERNAL_STATE&amp;quot; ]; then&lt;br /&gt;
        STATE=&amp;quot;internal&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
        INTERNAL_STATE=$(echo $INTERNAL_STATE | sed &amp;quot;s/[0-9]*x[0-9]*//&amp;quot;)&lt;br /&gt;
        EXTERNAL_STATE=$(echo $EXTERNAL_STATE | sed &amp;quot;s/[0-9]*x[0-9]*//&amp;quot;)&lt;br /&gt;
        if [ &amp;quot;$INTERNAL_STATE&amp;quot; = &amp;quot;$EXTERNAL_STATE&amp;quot; ]; then&lt;br /&gt;
                STATE=&amp;quot;mirror&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
                STATE=&amp;quot;both&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 function screen_external(){&lt;br /&gt;
        $SU &amp;quot;xrandr --output $INTERNAL_OUTPUT --off&amp;quot;&lt;br /&gt;
        $SU &amp;quot;xrandr --output $EXTERNAL_OUTPUT --auto&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function screen_internal(){&lt;br /&gt;
        $SU &amp;quot;xrandr --output $EXTERNAL_OUTPUT --off&amp;quot;&lt;br /&gt;
        $SU &amp;quot;xrandr --output $INTERNAL_OUTPUT --auto&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function screen_mirror(){&lt;br /&gt;
        $SU &amp;quot;xrandr --output $INTERNAL_OUTPUT --auto&amp;quot;&lt;br /&gt;
        $SU &amp;quot;xrandr --output $EXTERNAL_OUTPUT --auto --same-as $INTERNAL_OUTPUT&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function screen_both(){&lt;br /&gt;
        $SU &amp;quot;xrandr --output $INTERNAL_OUTPUT --auto&amp;quot;&lt;br /&gt;
        $SU &amp;quot;xrandr --output $EXTERNAL_OUTPUT --auto $EXTERNAL_LOCATION&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function screen_toggle(){&lt;br /&gt;
        case &amp;quot;$STATE&amp;quot; in&lt;br /&gt;
                internal)&lt;br /&gt;
                        screen_mirror&lt;br /&gt;
                        ;;&lt;br /&gt;
                mirror)&lt;br /&gt;
                        screen_external&lt;br /&gt;
                        ;;&lt;br /&gt;
                external)&lt;br /&gt;
                        screen_both&lt;br /&gt;
                        ;;&lt;br /&gt;
                both)&lt;br /&gt;
                        screen_internal&lt;br /&gt;
                        ;;&lt;br /&gt;
                *)&lt;br /&gt;
                        screen_internal&lt;br /&gt;
                        ;;&lt;br /&gt;
        esac&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # What should we do?&lt;br /&gt;
 DO=&amp;quot;$1&amp;quot;&lt;br /&gt;
 if [ -z &amp;quot;$DO&amp;quot; ]; then&lt;br /&gt;
        if [ $(basename $0) = &amp;quot;thinkpad-fn-f7&amp;quot; ]; then&lt;br /&gt;
                DO=&amp;quot;toggle&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 case &amp;quot;$DO&amp;quot; in&lt;br /&gt;
        toggle)&lt;br /&gt;
                screen_toggle&lt;br /&gt;
                ;;&lt;br /&gt;
        internal)&lt;br /&gt;
                screen_internal&lt;br /&gt;
                ;;&lt;br /&gt;
        external)&lt;br /&gt;
                screen_external&lt;br /&gt;
                ;;&lt;br /&gt;
        mirror)&lt;br /&gt;
                screen_mirror&lt;br /&gt;
                ;;&lt;br /&gt;
        both)&lt;br /&gt;
                screen_both&lt;br /&gt;
                ;;&lt;br /&gt;
        status)&lt;br /&gt;
                echo &amp;quot;Current Fn-F7 state is: $STATE&amp;quot;&lt;br /&gt;
                echo&lt;br /&gt;
                echo &amp;quot;Attached monitors:&amp;quot;&lt;br /&gt;
                $SU xrandr | grep &amp;quot;\Wconnected&amp;quot; | sed &amp;quot;s/^/ /&amp;quot;&lt;br /&gt;
                ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo &amp;quot;usage: $0 &amp;lt;command&amp;gt;&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
                echo &amp;gt;&amp;amp;2&lt;br /&gt;
                echo &amp;quot;  commands:&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
                echo &amp;quot;          status&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
                echo &amp;quot;          internal&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
                echo &amp;quot;          external&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
                echo &amp;quot;          mirror&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
                echo &amp;quot;          both&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
                echo &amp;quot;          toggle&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
                echo &amp;gt;&amp;amp;2&lt;br /&gt;
                ;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As root, run the following commands,&lt;br /&gt;
&lt;br /&gt;
 {{cmdroot|chmod 755 /usr/local/sbin/thinkpad-fn-f7}}&lt;br /&gt;
 {{cmdroot|service acpid restart}}&lt;br /&gt;
&lt;br /&gt;
You should be ready to go, just press Fn-F7 to try.&lt;/div&gt;</summary>
		<author><name>Foton2</name></author>
		
	</entry>
</feed>