Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I am running 11.04 on an Asus UL30. I am trying to run a script to fix my synclient settings (which are lost during resume). I have written the following script in /etc/pm/sleep.d/10_touchpad:

#!/bin/sh

#change synclient settings on resume

case "$1" in 

    resume|thaw)

        sleep 15 && synclient TapButton2=2 TapButton3=3 ;;
esac

/var/log/pm-suspend shows the following:

/etc/pm/sleep.d/10_grub-common suspend suspend: success. Running hook /etc/pm/sleep.d/10_touchpad suspend suspend: /etc/pm/sleep.d/10_unattended-upgrades-hibernate resume suspend: success. Running hook /etc/pm/sleep.d/10_touchpad resume suspend: Failed to connect to X Server.

/etc/pm/sleep.d/10_touchpad resume suspend: success. Running hook /etc/pm/sleep.d/10_grub-common

Not really sure why the synclient changes aren't being chnaged by this script on resume. Would appreciate any insight....

share|improve this question
1  
It's not working because the script runs as root, and also because synclient requires access to your X session. I don't have a solution for you. –  Geoff Jan 26 '12 at 23:05
    
damn! well thanks anyways –  benbeel Jan 27 '12 at 0:08
    
Found an answer. –  Geoff Feb 1 '12 at 15:33
add comment

1 Answer 1

Direct answer

In order to achieve your goal (of running an X-session dependent user-space script when your machine resumes) you must:

  1. run the script as the appropriate user; and
  2. ensure the DISPLAY variable is set.

I would move the line sleep 15 && synclient TapButton2=2 TapButton3=3 to a separate file say /usr/local/sbin/setupTouchpad.sh and replace the line with:

   export DISPLAY=:0
   su -c - <yourusername> /usr/local/sbin/setupTouchpad.sh

Where <yourusername> should be replaced. Note that it is still a good idea to have some sleep time to be sure the system is awake before running the code. Also, be sure to chmod +x that setupTouchpad.sh script.


A better way

The problem with the above is that you have to hard-code your username (or use some hackish way to discover which user is logged in and has the active X session). It's better to set system-wide touchpad settings for X.

These options may be set in /usr/share/X11/xorg.conf.d/

For me, the correct file to edit is 50-synaptics.conf here I've set options, here's a portion of that file:

Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"

        Option          "TapButton2"              "2"
        Option          "TapButton3"              "3"

        # Etc...
EndSection

As you may already be aware, to see valid options simply run synclient.

Note you must restart X for these changes to take effect. To do so in Ubuntu, for example, you can run sudo /etc/init.d/lightdm restart

To preview your changes you may try running the following line (or some variant). Remove | bash from the end to see the commands it's issuing.

cat /usr/share/X11/xorg.conf.d/50-synaptics.conf | grep Option | grep -v "^\#" | awk '{print "synclient " $2 "=" $3}' | sed 's/\"//g' | bash

If you Google around for touchpad settings synaptics xorg.conf.d you'll find a few good overviews of options, also.


References

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.