Difference between revisions of "Talk:Sample Fn-F7 script"

From ThinkWiki
Jump to: navigation, search
(fixed)
m (note re getXuser function)
Line 3: Line 3:
 
why not just use --auto ?
 
why not just use --auto ?
  
xrandr --output VGA --auto
+
xrandr --output LVDS --auto --output VGA --off
 
+
xrandr --output LVDS --off --output VGA --auto
xrandr --output VGA --off
 
 
 
xrandr --output LVDS --auto
 
   
 
xrandr --output LVDS --off
 
 
   
 
   
 
----
 
----
Line 21: Line 16:
 
SU="su $(w -h -s | grep ":[0-9]" | head -1 | awk '{print $1}') -c"
 
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}'
 
export DISPLAY=$(w -h -s | grep ":[0-9]" | head -1 | awk '{print $3}'
 
As the xrandr command can be run by the user is this necessary? if the script called by Fn7 can be run by an ordinary user then is it not equivalent to running the commands in an xterm?
 
djc@Twingo:~$ xrandr --output LVDS --auto --output VGA --off
 
djc@Twingo:~$ xrandr --output LVDS --off --output VGA --auto
 
djc@Twingo:~$ xrandr --output LVDS --auto --output VGA --auto
 
  
  
Line 32: Line 22:
 
  Screen 0: minimum 320 x 200, current 1024 x 768, maximum 2048 x 2048
 
  Screen 0: minimum 320 x 200, current 1024 x 768, maximum 2048 x 2048
 
  VGA connected (normal left inverted right)
 
  VGA connected (normal left inverted right)
  1600x1200      60.0 +  59.9   
+
    1600x1200      60.0 +  59.9   
 
   1280x1024      75.0    59.9   
 
   1280x1024      75.0    59.9   
 
   1152x864      74.8   
 
   1152x864      74.8   
Line 133: Line 123:
  
 
fixed --seva
 
fixed --seva
 +
 +
Re detecting the X user, it may be just as ugly but have you looked at
 +
  /usr/share/acpi-support/power-funcs
 +
 +
for example this is the /etc/acpi/screenblank.sh in Ubuntu 7.10
 +
 +
#!/bin/bash
 +
. /etc/default/acpi-support
 +
. /usr/share/acpi-support/power-funcs
 +
for x in /tmp/.X11-unix/*; do
 +
    displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
 +
    getXuser;
 +
    if [ x"$XAUTHORITY" != x"" ]; then
 +
        export DISPLAY=":$displaynum"
 +
. /usr/share/acpi-support/screenblank
 +
    fi
 +
done

Revision as of 03:04, 15 November 2007

Note: you will need to change the internal and external resolution until someone fixes this script to figure it out from xrandr, you may also need to change output names from "VGA" and "LVDS" to what your xrandr tells you.

why not just use --auto ?

xrandr --output LVDS --auto --output VGA --off
xrandr --output LVDS --off  --output VGA --auto


Good point, made the changes --seva


  1. This is to figure out which user and X11 display to work on
# TODO there has to be a better way to do this?

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}'


concerning detecting what is currently active from xrandr. with VGA off xrandrq shows

Screen 0: minimum 320 x 200, current 1024 x 768, maximum 2048 x 2048
VGA connected (normal left inverted right)
   1600x1200      60.0 +   59.9  
  1280x1024      75.0     59.9  
  1152x864       74.8  
  1024x768       75.1     60.0  
  800x600        75.0     60.3  
  640x480        75.0     60.0  
  720x400        70.1  
LVDS connected 1024x768+0+0 (normal left inverted right) 304mm x 228mm
  1024x768       60.0*+   50.0  
  800x600        60.3  
  640x480        60.0     59.9 

with VGA on

VGA connected 1600x1200+0+0 (normal left inverted right) 367mm x 275mm
  1600x1200      60.0*+   59.9  
  1280x1024      75.0     59.9  
  1152x864       74.8  
  1024x768       75.1     60.0  
  800x600        75.0     60.3  
  640x480        75.0     60.0  
  720x400        70.1  
LVDS connected 1024x768+0+0 (normal left inverted right) 304mm x 228mm
  1024x768       60.0*+   50.0  
  800x600        60.3  
  640x480        60.0     59.9  

with LVDS off:


djc@Twingo:~$ xrandr --output LVDS --off --output VGA --auto
djc@Twingo:~$ xrandr -q
Screen 0: minimum 320 x 200, current 1600 x 1200, maximum 2048 x 2048
VGA connected 1600x1200+0+0 (normal left inverted right) 367mm x 275mm
  1600x1200      60.0*+   59.9  
  1280x1024      75.0     59.9  
  1152x864       74.8  
  1024x768       75.1     60.0  
  800x600        75.0     60.3  
  640x480        75.0     60.0  
  720x400        70.1  
LVDS connected (normal left inverted right)
  1024x768       60.0 +   50.0  
  800x600        60.3  
  640x480        60.0     59.9  

so detection should be possible on the differences between

VGA connected 1600x1200+0+0 (normal left inverted right) 367mm x 275mm
VGA connected (normal left inverted right)
LVDS connected (normal left inverted right)
LVDS connected 1024x768+0+0 (normal left inverted right) 304mm x 228mm

eg between xxxx connected nnnnxnn+0+0 ( and xxxx connected (


Regarding 1. acpid runs as root, so I switch to a user account before runinng xrandr, however I need to figure out which user to switch to -- hence the hack.

Regarding 2. that doesn't tell us if screens are being mirrored or exended, just active, i think that in combination with some other tools (xwininfo -root perhaps?) could work.

--seva


djc@Twingo:~$ xrandr --output LVDS --auto --output VGA --auto --below LVDS
djc@Twingo:~$ xrandr -q
Screen 0: minimum 320 x 200, current 1600 x 1968, maximum 2048 x 2048
VGA connected 1600x1200+0+768 (normal left inverted right) 367mm x 275mm
...
LVDS connected 1024x768+0+0 (normal left inverted right) 304mm x 228mm

so the position is in the +0+768


Akw, I don't think the script needs to be colorized, it better to leave things the user needs to change in bold instead.

Ordonnateur, I've made the changes so the script now figures out the state from xrandr and doesn't need to store it to a file.

--seva


This is great work, better than I could do. But here is another bug for you: grep connected is also picking up disconnected.

 status)
              echo "Current Fn-F7 state is: $STATE"
              echo
              echo "Attached monitors:"
              xrandr | grep connected | sed "s/^/ /"

gives

djc@Twingo:~$ Desktop/thinkpad-fn-f7.sh status
Current Fn-F7 state is: internal
Attached monitors:
 VGA disconnected (normal left inverted right)
 LVDS connected 1024x768+0+0 (normal left inverted right) 304mm x 228mm

fixed --seva

Re detecting the X user, it may be just as ugly but have you looked at

 /usr/share/acpi-support/power-funcs

for example this is the /etc/acpi/screenblank.sh in Ubuntu 7.10

#!/bin/bash
. /etc/default/acpi-support
. /usr/share/acpi-support/power-funcs
for x in /tmp/.X11-unix/*; do
   displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
   getXuser;
   if [ x"$XAUTHORITY" != x"" ]; then
       export DISPLAY=":$displaynum"

. /usr/share/acpi-support/screenblank

   fi
done