Note for English Readers

If I write the articles in Indonesian, I will write a summary in English so that you can read my articles too. After you read the summary and you feel that you need more information about that, please do not hesitate to contact me via e-mail that can be found in my profile.

Thank you for reading my blogs.

Friday, March 25, 2011

How to make touchpad/clickpad temporarily disable when typing?

Since my laptop has clickpad that has larger area and more sensitive than common touchpad, I get an annoying behavior of my clickpad; when I type and my thumb or palm accidentally touches or near the clickpad, the cursor will be moved to the position that is pointed by mouse pointer, so that, I will continue to type in the wrong position! I hate this behavior! I have to disable my clickpad when I am typing. There are two methods:

Method 1, I disable my clickpad permanently. I run this script to toggle on/off my clickpad:
#!/bin/bash
#Toggle touchpad
SYNSTATE=$(synclient -l | grep TouchpadOff | awk '{ print $3}')
# change state
if [ $SYNSTATE = 0 ]; then
  synclient touchpadoff=1
elif [ $SYNSTATE = 1 ]; then
  synclient touchpadoff=0
fi

Method 2, I use /usr/bin/syndaemon to disable my clickpad only when I am typing. The steps:
  1. Make ~/.xprofile
    #!/bin/sh
    # Customize X environment
    #
    # Activate syndaemon for monitoring keyboard activity and disabling # the touchpad when the keyboard is being used.
    /usr/bin/syndaemon -td
  2. Add these lines on the top of /usr/bin/startkde (if you use KDE as the default desktop manager) in order to make X server executes ~/.xprofile when it starts.
    if [ -r /etc/xprofile ]; then
            source /etc/xprofile
    fi
    if [ -r $HOME/.xprofile ]; then
            source $HOME/.xprofile
    fi
  3. Restart X server.
Currently, I use method 2 because I only disable my clickpad temporarily when syndaemon detects keyboard action and resume my clickpad function within 2 seconds after the last key pressed. For more information about syndaemon, type: man syndaemon on your console.

Thursday, March 24, 2011

Synaptics-1.4.0 patch for activating right-click function on clickpad

Last month, I have written about how to activate right-click function on clickpad by patching synaptics-1.3.0. In this page, I will show you how to patch synaptics-1.4.0 so that you can use right-click function (also, middle-click). The patch is patch for synaptics-1.3.0 with a few changes. For the modified patch, you can download it from here (gzip compressed). You can follow the instructions from my last note; just change the step 3 with this: copy this file to path-to/x11/patch/ (in my case, copy it to /home/henry/rsync/x11/patch/). The rest will be same. I also put my clickpad.conf on google docs so that you can download it and place it in /etc/X11/xorg.conf.d/ then restart the X server.

Tuesday, March 22, 2011

ATI Catalyst Proprietary Display Driver 10.12 & kernel-2.6.38

If you want to use ATI Catalyst Proprietary Display Driver 10.12 on your PC/Laptop that running kernel 2.6.38, you will get error because the installer cannot create fglrx kernel module. You need to patch ATI Catalyst kernel module before you compile it manually. Here is the patch:

--- ./firegl_public.c   2010-12-02 22:28:43.000000000 +0100
+++ ./firegl_public.c.new       2011-01-09 17:40:22.000000000 +0100
@@ -320,7 +320,7 @@
     return firegl_release((KCL_IO_FILE_Handle)filp);
 }

-int ip_firegl_ioctl(struct inode* inode, struct file* filp, unsigned int cmd, unsigned long arg)
+int ip_firegl_ioctl(struct file* filp, unsigned int cmd, unsigned long arg)
 {
     return firegl_ioctl((KCL_IO_FILE_Handle)filp, cmd, arg);
 }
@@ -407,7 +407,7 @@
 #endif
     open:    ip_firegl_open,
     release: ip_firegl_release,
-    ioctl:   ip_firegl_ioctl,
+    unlocked_ioctl:   ip_firegl_ioctl,
     mmap:    ip_firegl_mmap,

     write:   ip_firegl_write,
@@ -840,7 +840,12 @@ static int fglrx_pci_suspend(struct pci_
      * happen much less frequent then without this workaround.
      */
     if (state == PM_EVENT_SUSPEND)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)
+        console_lock();
+#else
         acquire_console_sem();
+#endif
+

     if (firegl_cail_powerdown(privdev, state))
         ret = -EIO;
@@ -862,7 +867,11 @@ static int fglrx_pci_suspend(struct pci_
     }

     if (state == PM_EVENT_SUSPEND)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)
+        console_unlock();
+#else
         release_console_sem();
+#endif

     KCL_DEBUG_TRACEOUT(FN_FIREGL_ACPI, ret, NULL); 
    
@@ -886,7 +895,11 @@ static int fglrx_pci_resume(struct pci_d
     if (PMSG_EVENT(pdev->dev.power.power_state) == 0) return 0;

     if (PMSG_EVENT(pdev->dev.power.power_state) == PM_EVENT_SUSPEND)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)
+        console_lock();
+#else
         acquire_console_sem();
+#endif

 #ifdef FIREGL_USWC_SUPPORT
     // Restore the PAT after resuming from S3 or S4.
@@ -911,7 +924,11 @@ static int fglrx_pci_resume(struct pci_d
     firegl_cail_powerup(privdev);

     if (PMSG_EVENT(pdev->dev.power.power_state) == PM_EVENT_SUSPEND)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)
+        console_unlock();
+#else
         release_console_sem();
+#endif

     PMSG_EVENT(pdev->dev.power.power_state) = 0;
     KCL_DEBUG_TRACEOUT(FN_FIREGL_ACPI, 0, NULL); 

@@ -5107,7 +5107,7 @@
 unsigned int ATI_API_CALL KAS_Mutex_Initialize(void* hMutex)
 {
     kasMutex_t* mutex_obj = (kasMutex_t*)hMutex;
-    init_MUTEX(&(mutex_obj->mutex));
+    sema_init(&(mutex_obj->mutex),1);
     return 1;
 }

--- ./kcl_ioctl.c       2010-12-02 22:28:43.000000000 +0100
+++ ./kcl_ioctl.c.new   2011-01-09 17:40:22.000000000 +0100
@@ -193,7 +193,7 @@
  */
 void* ATI_API_CALL KCL_IOCTL_AllocUserSpace32(long size)
 {
-    void __user *ret = COMPAT_ALLOC_USER_SPACE(size);
+    void __user *ret = arch_compat_alloc_user_space(size);

     /* prevent stack overflow */
     if (!access_ok(VERIFY_WRITE, ret, size))

Save this patch to file and follow the instructions that I have written on http://henryhermawan.blogspot.com/2011/02/problem-when-using-ati-catalyst.html.

Reference: http://groups.google.com/group/linux.debian.bugs.dist/browse_thread/thread/3b716dfe326fef23?pli=1

Saturday, March 12, 2011

dmesg: operation not permitted as user


After upgrading to Slackware64 13.37, I cannot access the kernel syslog (dmesg) as user. This problem is caused by kernel (2.6.37.3) setting in Slackware (see pictures below).



There are 2 solutions, you are freely to choose one of them.

Solution 1: add these lines on your rc.local:
if [ -r /proc/sys/kernel/dmesg_restrict ]; then
    if [ $(cat /proc/sys/kernel/dmesg_restrict) = 1 ]; then
        echo 0 > /proc/sys/kernel/dmesg_restrict
    fi
fi

Solution 2: change the correspond kernel setting (restrict unprivileged access to the kernel syslog) to "N" then recompile the kernel.

Sunday, February 27, 2011

Bigger buffer log (dmesg) size

Someone asked me: how to make dmesg output is not truncated. The answer is make the buffer log size bigger. How? As far as I know, there are two ways to raise the buffer log size:
  1. Pass the parameter of log_buf_len=n to kernel, where n is a power of two number (n = 2^x). The default for slackware is 2^15 or 32768 (32k). You can change n to 65536 (2^16) or 131072 (2^17). In this way, you don't need to recompile your current kernel.
  2. Compile or recompile your kernel. Before you compile the kernel yourself or recompile it yourself, you have to change the kernel parameter in General Setup > Kernel log buffer size (see figure) to 16 (65536) or 17 (131072). After compilation, don't forget to copy kernel image, config, and System.map into /boot directory and set up your bootloader (lilo/grub) properly.


Choose one of them then you will get full dmesg output on your screen. It will be very long message log.

Saturday, February 26, 2011

Problem when using ATI Catalyst Proprietary Display Driver 11.x

When I monitored ATI Catalyst driver website for Linux, the last driver version is 11.2 (15 Feb 2011). However, when I tried to install it on my laptop (ATI Mobility Radeon HD5400 series, my own compilation of kernel 2.6.37.2, & Xorg-server 1.9.4 from slackware64-current), the x server crashed. This happened also when I tried to install 11.1 version. Therefore, I have to draw back to the 10.12 version and it runs smoothly on my laptop. Since this version is very stable, I suggest, it's better if you stay on 10.12 version until AMD releases the new version.

Note: If you want to install the 10.12 version, you will need to patch the kernel module of ATI Catalyst using this patch for 2.6.37.x or this patch for 2.6.36.x. You don't need to this patch if you are using 2.6.35.x. Also, the 11.x version of ATI Catalyst doesn't need this patch.

How to install & patch:
  • Download the 10.12 version from here.
  • From console (run in text mode, make sure to this as root and the installer are executable), enter the directory where the installer is then run: ./ati-driver-installer-10-12-x86.x86_64.run --install
  • Follow the instructions.
  • When done, enter to /lib/modules/fglrx/build_mod/
  • copy the patch to this directory then run: patch -p0 < fglrx_10.10-12_with_2.6.XX.x.diff (note that XX is 36 or 37, depends on your kernel version).
  • run: ./make.sh
  • if there is no error, go up to one level (/lib/modules/fglrx/) then do: ./make_install.sh
  • reboot your system
  • use aticonfig --initial to create /etc/X11/xorg.conf then make necessary changes on it. My suggestion, it's better if you move and rename that xorg.conf to /etc/X11/xorg.conf.d/fglrx.conf
  • start your x server
Test your display, activate desktop effect, or whatever you want.

Thursday, February 3, 2011

How to activate right-click function on clickpad?

Finally, I can use the right-click of the clickpad on my laptop (HP Pavilion dv3-4036TX). Clickpad is differ from touchpad, those are, it is larger than touchpad and it doesn't have physical buttons for left- and right-click (see picture below and click here for more detail).


Because of this construction, if we use common driver (synaptics) on linux, you cannot use right-click function, in other word, when you click on both left and right bottom side of clickpad, you will get left-click function only.

If you want to activate right-click function, you have to patch the xf86-input-synaptics driver. You can download the patch from this site. How to patch? Follow the steps below:
  1. Download the source of x11 (the whole directory tree) from Slackware site. It's better if you use rsync command for downloading it. In my case, I use: rsync -avP rsync.osuosl.org::slackware/slackware64-current/source/x/x11 /home/henry/rsync/
  2. Copy the patch to path-to/x11/patch/xf86-input-synaptics/. In my case, I copy it to /home/henry/rsync/x11/patch/xf86-input-synaptics/.
  3. Add this line: patch -p1 < $CWD/patch/xf86-input-synaptics/synaptics-clickpad-support.patch --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; } to path-to/x11/patch/xf86-input-synaptics.patch then save it. In my case, I add that line to /home/henry/rsync/x11/patch/xf86-input-synaptics.patch file.
  4. Run the slackbuild script exactly like this: ./x11.slackbuild driver xf86-input-synaptics
  5. You will get new slackware package of xf86-input-synaptics for your clickpad. Afterward, upgrade the existing xf86-input-synaptics with the new one using upgradepkg.
  6. Make new file (you can name it freely) in /etc/X11/xorg.conf.d/ (in my case: /etc/X11/xorg.conf.d/clickpad.conf), then write these lines in the file then save it:
Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
          Option "TapButton1" "1"
          Option "TapButton2" "2"
          Option "TapButton3" "3"
EndSection

Restart X server, then enjoy your "right-click function" of clickpad if you click the right bottom area of clickpad. In addition, if you click the middle bottom area of clickpad, you will get "middle-button function".