Search This Blog

Showing posts with label linux. Show all posts
Showing posts with label linux. Show all posts

Sunday, September 16, 2012

New acquisition: Samsung ML-2165w printer

Last week I ordered a laser printer for me in a Brazilian web site (I live Brazil by the way). I made the order on last Monday night and it arrived here last Saturday morning, that's half of the ETA :-) I chose ML-2165w because it is cheap (around USD 125 with shipping) and is wireless. I am not going to print a lot of documents, but some of them contain sensitive data that I prefer to print at home. My brother also own an ink jet printer, but it is usually out of order because its cartridge ink is dry (not empty, the ink is not fluid after several weeks without using it).

It took me sometime to find the correct driver for the printer, believe or not it is on Samsung's website [1] :-) Unfortunately, Gentoo does not come with an ebuild (package) to install the driver. The calculate overlay [2] contains an ebuild to install an old version of the driver (net-print/samsung-unified-linux-driver/samsung-unified-linux-driver-1.01.ebuild), so I copied the ebuild from there to my personal overlay, edit it to updated SRC_URI url to [1], commented the part that install sane configuration, which this newer version of the driver does not have anymore, run ebuild digest comand to calculate the checksums used to check the source code integrity used by the ebuild, installed the new ebuild and voilà. cups-1.6.1 recognised the printer and after configuring it as network printer (URI == socket://:9100) it printed my test document like a charm.

A short review of this printer:

PROS:

. the printer is cheap. However, the toner is very expensive, in some cases more expensive than the printer.
. toner lasts longer than ink cartridges when not used for long periods of time. That is the main reason I bought a laser printer, besides the fact that the cost per page of a toner is better than ink cartridges.
. comes with USB cable. You must be asking why USB cable if it is a wireless printer, well, you need the USB cable to configure the wireless part :-) If you have an access point that supports WPS (Wifi Protected Setup) then you do not need USB cable, that is not my case though.
. it is small and fast.
. it is wireless.
. I think the printing is very good even in toner economy mode.
. it is easy to configure even in Linux :-D as long as you know where to find the driver. As a side note even Win7 does not come with the driver for this printer, I needed to use the supplied DVD to install it in the Win7 that came with my notebook. OBS: when in doubt always reset the  network configuration and start from zero instead of overriding the current configuration. It took me sometime to re-configure the wifi configuration because of that detail.
. I read on the Internet that Samsung implemented the Easy Printer software for Linux as well. That is the software used to configure the printer on Windows. I have not tried it though. I used its Windows version to set up the wireless (wifi) configuration, if you do not have a Windows computer or a special access point that supports WPS you will probably need to install the Linux version of Easy Printer to set up the printer's wifi configuration. I also fixed the printer's IP on my wifi router, so it will always get the same IP from my router's dhcp server.


CONS:

. toner is very expensive.
. supplied toner prints up to 700 pages. That is enough for me, may not be for everyone.
. manual duplex printing, like most cheap printers.
. it consumes a considerable amount of energy (gets hot easily too).
. curles the paper considerably.
. does not come with printed manual, which is available on Samsung's website.
. documentation is a bit confusing regarding wireless configuration. It explains how to configure it but do not explain how to re-configure the wireless part. Repeating the configuration process does not work (it never associates to the access point even though it finds it when scanning) until you reset the printer's network configuration using Easy Printer. That crutial detail is not written in the manual.

[1] http://org.downloadcenter.samsung.com/downloadfile/ContentsFile.aspx?VPath=DR/201110/20111019151150392/UnifiedLinuxDriver_1.01.tar.gz

[2] overlays are like unofficial repositories, usually with unstable programs or data (firmware, drivers, etc).

Thursday, August 2, 2012

Tux on Ice and swap

Strictly speaking this is off topic since it is not KDE related, anyway it looks interesting for those who use suspend to disk in Linux, specially the Tux on Ice flavor of the available suspend implementations for Linux.

I have been using Tux on Ice for years and also for years I have been suffering from segfaults in several programs after resume from disk. With my old notebook I workarounded this problem by cleaning the swap partition (swapoff -a; swapon -a) before suspending. That works but, as you may be thinking, it is damn slow if there are hundreds of MB in swap partition.

When I bought my current notebook I elimated any swap partition and started using a swap file instead. Resizing partitions is a slow process and not always safe, resizing a file is much easier (just delete it and recreate it :-)). Using swap file was something I wanted to do for a long time back then. Well, the swap partition problem was fixed but not the segfaults.

Last week I looked more deeply into the problem to figure out how to solve it for good or at least find a faster workaround. One thing that I noticed in my /var/log/message is the failed memory allocation below:


Jul 24 09:22:14 evolucao kernel: [81109.228445] [fglrx] IRQ 46 Disabled
Jul 24 09:22:15 evolucao kernel: [81109.228526] [fglrx] Preparing suspend fglrx in kernel.
Jul 24 09:22:15 evolucao kernel: [81109.228538] kworker/u:8: page allocation failure: order:10, mode:0x20
Jul 24 09:22:15 evolucao kernel: [81109.228540] Pid: 26030, comm: kworker/u:8 Tainted: P       A   O 3.4.6-lvs #9
Jul 24 09:22:15 evolucao kernel: [81109.228542] Call Trace:
Jul 24 09:22:16 evolucao kernel: [81109.228552]  [] warn_alloc_failed+0x108/0x11d
Jul 24 09:22:16 evolucao kernel: [81109.228559]  [] ? number.clone.1+0x129/0x229
Jul 24 09:22:16 evolucao kernel: [81109.228562]  [] __alloc_pages_nodemask+0x61e/0x6c3
Jul 24 09:22:17 evolucao kernel: [81109.228566]  [] cache_alloc_refill+0x276/0x4fb
Jul 24 09:22:17 evolucao kernel: [81109.228568]  [] __kmalloc+0x9d/0x144
Jul 24 09:22:17 evolucao kernel: [81109.228617]  [] ? KCL_MEM_SmallBufferAllocAtomic+0x19/0x1b [fglrx]
Jul 24 09:22:17 evolucao kernel: [81109.228640]  [] KCL_MEM_SmallBufferAllocAtomic+0x19/0x1b [fglrx]
Jul 24 09:22:18 evolucao kernel: [81109.228669]  [] libip_resume+0x253/0x5c0 [fglrx]
Jul 24 09:22:19 evolucao kernel: [81109.228704]  [] ? mc_heap_get_reserved_blocks_info+0x17e/0x2a0 [fglrx]
Jul 24 09:22:19 evolucao kernel: [81109.228725]  [] ? KCL_MEM_SmallBufferAllocAtomic+0x19/0x1b [fglrx]
Jul 24 09:22:20 evolucao kernel: [81109.228758]  [] ? firegl_pm_save_framebuffer+0x204/0x300 [fglrx]
Jul 24 09:22:20 evolucao kernel: [81109.228785]  [] ? firegl_cail_powerdown+0x8d/0x240 [fglrx]
Jul 24 09:22:20 evolucao kernel: [81109.228812]  [] ? libip_suspend+0x22/0x50 [fglrx]
Jul 24 09:22:21 evolucao kernel: [81109.228831]  [] ? ip_firegl_lseek+0xeb8/0x17ef [fglrx]
Jul 24 09:22:21 evolucao kernel: [81109.228835]  [] ? pci_legacy_suspend+0x35/0xb8
Jul 24 09:22:21 evolucao kernel: [81109.228838]  [] ? pci_pm_freeze+0x43/0x8b
Jul 24 09:22:21 evolucao kernel: [81109.228844]  [] ? device_pm_wait_for_dev+0x24/0x24
Jul 24 09:22:21 evolucao kernel: [81109.228846]  [] ? pci_pm_poweroff+0x98/0x98
Jul 24 09:22:21 evolucao kernel: [81109.228849]  [] ? dpm_run_callback.clone.4+0x2a/0x58
Jul 24 09:22:22 evolucao kernel: [81109.228851]  [] ? __device_suspend+0x145/0x1c4
Jul 24 09:22:22 evolucao kernel: [81109.228856]  [] ? async_schedule+0x12/0x12
Jul 24 09:22:22 evolucao kernel: [81109.228858]  [] ? async_suspend+0x1a/0x85
Jul 24 09:22:22 evolucao kernel: [81109.228861]  [] ? async_run_entry_fn+0xa3/0x159
Jul 24 09:22:22 evolucao kernel: [81109.228865]  [] ? process_one_work+0x214/0x393
Jul 24 09:22:22 evolucao kernel: [81109.228868]  [] ? need_to_create_worker+0x19/0x32
Jul 24 09:22:22 evolucao kernel: [81109.228871]  [] ? worker_thread+0x17e/0x243
Jul 24 09:22:23 evolucao kernel: [81109.228875]  [] ? preempt_schedule+0x35/0x48
Jul 24 09:22:23 evolucao kernel: [81109.228877]  [] ? manage_workers.clone.17+0x16e/0x16e
Jul 24 09:22:23 evolucao kernel: [81109.228880]  [] ? kthread+0x84/0x8c
Jul 24 09:22:23 evolucao kernel: [81109.228883]  [] ? kernel_thread_helper+0x4/0x10
Jul 24 09:22:23 evolucao kernel: [81109.228885]  [] ? kthread_freezable_should_stop+0x4d/0x4d
Jul 24 09:22:23 evolucao kernel: [81109.228888]  [] ? gs_change+0xb/0xb


You must be thinking in blaming fglrx for this problem but I use the opensource driver in my old notebook, which probably still has this problem (I still own my old notebook). Moreover, in the first months after buying my current notebook I used to use the opensource drivers with it too, so I am almost sure this problem is not related to that allocation failure above. OBS: I changed to the proprietary ATI driver because only with it my notebook's fan keeps quiet without the "silent" speed button that comes with my notebook. The silent button also limits the cores' clock to almost 1 GHz below the maximum clock and having to press it everytime I want full CPU power or restart the notebook is really annoying. For someone who uses Gentoo I used to press that button quite often when I used the opensource driver. Unfortunately, the GPU does not inform its power profile to the kernel so the opensource driver's dynamic profile does not work with it. I am stuck to the proprietary driver until someone can fix that issue. I hope this news allows someone to finally implement the dynamic profile for my GPU.

Turning back to the segfault problem, some days ago I tried something different. Tux On Ice works with swap partition, swap files and also with a dedicated file to store the image. I decided to split my 4 GB swap file into two: one 2 GB file for swap and another 2 GB file for the hibernate image. My notebook came with 4 GB of RAM memory and I usually do not need more than 1 GB of swap even when I run two virtual machines, Chromium, Firefox and several other programs running in parallel, so I can afford a smaller swap file (again: swap files are really easy to resize :-)). Guess what? There has been no segfaults so far :-D. I also love the fact that Tux on Ice compresses the RAM image using all available cores before saving it.

I do not know if the vanilla suspend implementation in the Linux kernel also suffers from this problem. By what I could find on the Internet it may be affected as well. As far as I know the vanilla suspend does not allow using anything but swap partitions to store the image (not even swap files). So if you have this problem you can give Tux on Ice a try.

I did a final test by suspending to disk with chromium, VirtualBox, Amarok, kmail, konversation, kopete and skype running. The command free reported "-/+ buffers/cache: 2310964 KB", which means about 59%  of the available RAM memory used by applications (excluding buffers and disck cache). There was also 666844 KB in my swap file. The suspend process was not that fast but (about 20s). Resuming took much more time (about 2 minutes until the Plasma Desktop reappears). There was a lot of disk activity and the swap usage went from 666844 KB to 1027240 KB and then down to 879456 KB in a period of two minutes after which I could finally type commands in konsole. However everything is still working, no segfault and Amarok kept playing the same song I was listening to when I suspended my notebook :-) I am now at the fifth day running without reboots and segfaults, the swap usage dropped to 353112 KB during this period.

The failed memory allocation I talked about above happened this time and everything still works with fglrx (including kwin's effects). Well, I have found a fast suspend/resume configuration at last (as long as there was not much data in swap). If I close the memory hungry programs (like VirtualBox and Chromium) before suspending then it suspends in about 10s and resumes in about 15s, half of that time running pm-utils' scripts That is not that bad :-)

Wednesday, July 27, 2011

E-sata, solid, and udisks (part 2)


In my first post about e-sata, solid and udisks I wrote about how to hack udisks to inform solid that a disk attached to a specified sata port is actually a removable disk. Udisks-1.0.3 includes a modified patch that allows to do that without applying the patch ourselves. We still need to add the udev rule to indicate which sata port is to be considered "non system internal". The udev rules is slightly diferent from the one I wrote about in my last Solid post:

File /etc/udev/rules.d/99-esata.rules
DEVPATH=="/devices/pci0000:00/0000:00:1f.2/host4/*", ENV{UDISKS_SYSTEM_INTERNAL}="0"

Change the DEVPATH to match your e-sata port. You can find it using the command:

Code
evolucao ~ # find /sys/devices/ -name sdb
/sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sdb


Then reload udev rules after creating/editing the file above: udevadm control --reload-rules

Now the bad news: udisks includes several attributes to a disk, among then are "system internal" and "removable". Removable means removable media (like optical discs, card readers, etc). System internal means the device is "fixed" to the computer, it cannot be removed without turning the computer off, like sata disks. E-sata is in between those two, for sure it is not system internal and technically it is not removable media according to udisks criteria too.

Currently Solid uses udisks' eject command to eject e-sata disks but since an e-sata disk is not removable media and the disk has not actually been removed (detached from the e-sata port) udisks signals that a new disk is available and kded remounts the disk right after the eject command succeeds (bug #277517).


We could use udisks' detach command instead of eject, but udisks seems to refuse to use it with devices with removable flag set to false, which is the case for e-sata disks. Anyway, sometimes we just want to unmount the partition but not turn the disk off, in that case udisks' detach command is inadequate since you will need to turn the disk off and on to use it again.

I think:  1. Solid should stop using udisks' eject command for e-sata partitions (/dev/sdb1, /dev/sdb2, etc) and use the umount command instead. 2. For the entire e-sata disk (/dev/sdb) we should use udisks' detach command, but that will only work when 3. someone fixes udisks to allow executing the detach command for all non system internal devices and not only for the removable ones.

We can do #1 right now. #2 requires some GUI to call the detach command, something that can be used in device notifier plasmoid. #3 is upstream bug :-/

When I have more time I will try to solve this, but for now I am busy and with a dead line approaching, so if someone wants to take the task to fix this problem feel free to do it.

Wednesday, March 30, 2011

E-sata, solid, and udisks


Last year I wrote about how to hack hal to recognise disks attached to an e-sata port as removable. Now that udisks is the default disk manager in Solid I will explain how to hack udisks to do the same:

  1. The hal hack is just a xml file that overrides disk's removable flag. With udisks things are a bit more complicated. I had to apply this patch to udisks and recompile it. The patch adds the flag UDISKS_FORCE_SYSTEM_INTERNAL, which lets us mark the disk as internal or external (AKA removable).
  2. Restart udisks. Just kill it and it will restart automatically: killall udisks-daemon # as root
  3. After that we need to add an udev rule which will actually mark the disk as removable:
  4. File /etc/udev/rules.d/99-esata.rules
    DEVPATH=="/devices/pci0000:00/0000:00:1f.2/host4/*", ENV{UDISKS_FORCE_SYSTEM_INTERNAL}="0"
    Change the DEVPATH to match your e-sata port. You can find it using the command:
    Code
    evolucao ~ # find /sys/devices/ -name sdb
    /sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sdb
  5. Reload udev rules: udevadm control --reload-rules
That is it :-)

There is already a bug entry about the e-sata problem in udisks' bugzilla. In fact, I found the UDISKS_FORCE_SYSTEM_INTERNAL patch in that bug entry.

Friday, January 21, 2011

Samsung i8910 cellphone and Linux


Synchronizing contacts in the command line

  • Install program syncml-ds-tool. In my case it comes in the libsyncml-0.5.2 ebuild (package in Gentoo's jargon).
  • Create an empty directory called contacts.
  • Connect the i8910 to the USB port in "PC Suite" mode.
  • Execute the script below:

    File sync_contacts.sh
    #!/bin/sh
    syncml-ds-tool -u 0 --identifier 'PC Suite' --version 1.1 --wbxml \
    --username '' --password '' --useStringTable --remoteWinsConflicts \
    --slow-sync text/x-vcard Contacts $(pwd)/contacts/
    

One file per contact will be created in the contacts directory. They are in vCard 2.1 format, you can edit them with your prefered text editor. To upload the changes to the phone:

  • Delete all contacts from you phone (yes, that is right). To delete them go to Contacts -> Options -> Mark/Unmark -> Mark all, then Options -> Delete.
  • Execute the same script above.

One alternative to deleting all phone's contacts is removing the "--remoteWinsConflicts" option and executing the script above. I prefer to use the first method because sometimes removing "--remoteWinsConflicts" makes contacts appear twice in the phone or in the contacts directory.

You can use KDE's KAddressbook to edit the contacts. When I have more time I will write how to do that.

Synchronizing contacts using KDE's Akonadi
Well, this is yet to be written since it is not officially working. There is an old version that works somewhat, but is not reliable so we have better wait.

Using the phone as bluetooth modem
If you use Linux and KDE follow the instructions in here, if not keep reading :-)

Ok, now it connects and I can surf the web, I am connected through bluetooth now. What I did:

udev/bluethood do not create the /dev/rfcommX, I had to create it and connect it manually to my phone:

#mknod --mode=666 /dev/rfcomm0 c 216 0
#rfcomm connect 0 <phone's mac address> 4

The number 0 in the rfcomm command means rfcomm0. The number 4 is the channel. To find the correct channel do:

evolucao ~ # sdptool search DUN
Inquiring ...
Searching for DUN on 00:23:D4:2E:13:B8 ...
Service Name: Dial-Up Networking
Service RecHandle: 0x1001f
Service Class ID List:
  "Dialup Networking" (0x1103)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 4
Language Base Attr List:
  code_ISO639: 0x454e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Dialup Networking" (0x1103)
    Version: 0x0100

DUN means bluetooth dial-up network.

then you can use wvdial: using /dev/rfcomm0 as Modem parameter.

It also works with KDE's Plasma NetworkManagement and ModemManager-0.4:



Using the phone as Bluetooth GPS

To do that you need:

. python and python script shell 2.0.0 signed by Nokia with full capability. Most python install files out there do not have Location capability, which rises "permission denied" errors when any python program tries to access the internal GPS. Probably this also happens with Java programs, which would affect ExtGPS. The needed files are Python_2.0.0.sis and PythonScriptShell_2.0.0_high_capas.sis. Install them on C:

. download s60_as_bt_gps.py and locationrequestor_3rd.sis. I had to add some fixes to s60_as_bt_gps.py to prevent it from crashing. The changes are simple: 1. In line 34 change "import socket" to "import btsocket as socket"; 2. In line 320 add a "if len(args) > 7:", in the following 5 lines add a tab to ident the if (Python requires that to accept the if); 3. In line 332 do the same, add "if len(args) > 13:" and ident all lines until the line with "###########"

. Install the .sis and copy s60_as_bt_gps.py to C:/Data/Python/ using X-plore for instance.

. turn Bluetooth on.

. run Python Scriptshell and from there run s60_as_bt_gps.py.

. click on Options -> Accept Connections.

That is it. The bluetooth service should be available now on channel 10.

Importing GPS data into GoogleEarth
I also managed to import the data into GoogleEarth running in my Linux installation. I have not tried to do that in Windows. I used the information here, although I had to fix the python script available in that page (gegpsd-0.2.py) because the script in the phone exports the GPS data in a different NMEA type. It is not that hard to fix it, you just need to understand the fields in the two NMEA types used by the phone ($GPGGA) and the script ($GPRMC).

To attach the phone's bluetooth NMEA service to Linux you need to execute as root:

rfcomm bind /dev/rfcomm0  00:11:22:33:44:55 10

where 00:11:22:33:44:55 is your phone's bluetooth MAC address and 10 is the channel the 60_as_bt_gps.py script got from Symbian bluetooth service (it may not be 10).

Then you need to edit the gegpsd-0.2.py file and change the serial_port variable to /dev/rfcomm0, the field number 3 to 2 (latitude), 5 to 4 (longitude), 4 to 3 (North/South switch), and 6 to 5 (West/East switch) in the datablock variable, and change $GPRMC to $GPGGA. The $GPGGA type does not indicate speed so you can ignore this value.

Then is just run the gegpsd-0.2.py script and import the gps.kml file available on that page into GoogleEarth. It is a bit slow but it works :-)

Tuesday, September 21, 2010

E-sata and Solid



Some days ago a guy asked in the kde-hardware-devel mailing list how to make disks connected to an e-sata port to behave like removable disk in KDE. I have a notebook (Sager np7652) with one e-sata port and had this problem too, but have never tried to fix that, until now. I think what I have found can help other people too so I am writing this post.

After some tries I found a way to tell hald that my disks' partitions come from a removable disk. That works but have an inconvinience, I needed to create one configuration file per partition. Some more tries and finally I got to configure hald to treat all disks connected to my e-sata controller as removable:

  1. Add this file to your system:

    File /etc/hal/fdi/policy/40-e-sata.fdi
    <?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
    
    <deviceinfo version="0.2">
      <device>
        <match key="linux.sysfs_path" contains="/sys/devices/pci0000:00/0000:00:1f.2/host4/">
          <merge key="volume.ignore" type="bool">false</merge>
          <merge key="@block.storage_device:storage.removable" type="bool">true</merge>
        </match>
      </device>
    </deviceinfo>
    
  2. Change the contains part to match your e-sata controller's. You can find it using the command:
    Code
    evolucao ~ # find /sys/devices/ -name sdb
    /sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sdb
    
  3. Restart hald: /etc/init.d/hald restart
  4. That's it :-)

The strange thing is that the file /sys/class/block/sdb/removable contains 0, it should contains 1 since the disk is removable. Maybe it is a kernel bug.

Hal is deprecated for some years now, KDE SC, more precisely Solid, is the only desktop/library that uses it extensively. When we, Solid metal-workers, finish Solid transition to udisk and upower probably hal is gonna vanish for ever.

In less than two weeks there will a Solid Sprint in Madri (Spain), I will be there :-), and we are going to discuss how far we are from the end of this transition. Honestly I like hal, it is flexible from users point of view. I have never used udisk and I do not know if it possible to workaround a problem in the kernel such as this one about disks connected to a e-sata controller using udisk. I hope it is.

Wednesday, August 18, 2010

Hotkey buttons and udev

As many notebooks out there mine has some hotkey buttons for (de)activate the wifi card, bluetooth controller, webcam, etc. With the buttons sometimes the notebook also has leds to indicate which hardware is activated at the moment, unfortunately my notebook only has leds for wifi and bluetooth, not for the webcam. More unfortunately yet the leds for wifi and bluetooth is the same led but with different color to indicate when only one of them are activated, but I must say Clevo, the manufacturer of my notebooks' barebone, did not make a good choice selecting the colors orange and green :-( It is very difficult to distinguish between the states wifi on / bluetooth off and wifi off / bluetooth on. Even the state wifi on / bluetooth on is not easy to notice. To minimize that problem I created some udev rules and some scripts to open a KDE notification dialog every time they are activated or deactivated. Everybody in Linux "world" must have heard of udev, the system daemon which receives events from the kernel and run programs or scripts based on rules storared in /etc/udev/rules.d or /lib/udev/rules.d. In my case I added my rules to /etc/udev/rules.d:
File /etc/udev/rules.d/50-lvs-rfkill.rules
SUBSYSTEM=="rfkill", RUN+="lvs-rfkill.sh"
File /etc/udev/rules.d/50-lvs-webcam.rules
# Change the idProduct and idVendor attributes to your camera's.
# Use lsusb to find them.
SUBSYSTEM=="video4linux", ATTRS{idProduct}=="0343", ATTRS{idVendor}=="5986", RUN+="lvs-webcam.sh"
Then run this to reload the rules:
Reload udev rules
udevadm control --reload-rules 
Now we need to create the scripts lvs-rfkill.sh and lvs-webcam.sh and give execution permission to them (chmod 755):
File /lib/udev/lvs-rfkill.sh
#!/bin/sh

find_display()
{
    if [ -r "/proc/$1/environ" ]
    then
        perl -ne 'if ( /DISPLAY=([^:]+){0,1}(:\d+)(.\d+){0,1}/ )
         { print "$1$2$3\n"; }' &lt; /proc/$1/environ
    fi

    return 0
}

user_loop()
{
    OLD_DISPLAY=$DISPLAY
    ps -C kwrapper -C kwrapper4 h -o pid,user | while read pid user
    do
        grep -q ksmserver /proc/$pid/cmdline &> /dev/null || continue
        export DISPLAY=$(find_display $pid)
        su - $user -c "$1"
    done
    export DISPLAY=$OLD_DISPLAY
    unset OLD_DISPLAY
    sleep 1
}

title=
msg=
case $RFKILL_TYPE in
    wlan)
        title="Wireless"

        case $ACTION in
            add|change)
                case $RFKILL_STATE in
                    0)
                        msg="Wireless disabled"
                    ;;
                        
                    1)
                        msg="Wireless enabled"
                    ;;

                    2)
                        msg="Wireless disabled by hardware"
                    ;;
                esac
            ;;

            remove)
                msg="Wireless disabled"
            ;;
        esac
    ;;

    bluetooth)
        title="Bluetooth"

        case $ACTION in
            add)
                msg="Bluetooth enabled"
                echo 1 > /sys/$DEVPATH/state
            ;;

            remove)
                msg="Bluetooth disabled"
            ;;
        esac
    ;;
esac

if [ "$msg" != "" ]
then
    user_loop "$(ls /usr/kde/*/bin/kdialog | tail -n 1) \
        --title \"$title\" --passivepopup \"$msg\" 3"
fi
File /lib/udev/lvs-webcam.sh
#!/bin/sh

find_display()
{
    if [ -r "/proc/$1/environ" ]
    then
        perl -ne 'if ( /DISPLAY=([^:]+){0,1}(:\d+)(.\d+){0,1}/ )
            { print "$1$2$3\n"; }' &lt; /proc/$1/environ
    fi

    return 0
}

user_loop()
{
    OLD_DISPLAY=$DISPLAY
    ps -C kwrapper -C kwrapper4 h -o pid,user | while read pid user
    do
        grep -q ksmserver /proc/$pid/cmdline &> /dev/null || continue
        export DISPLAY=$(find_display $pid)
        su - $user -c "$1"
    done
    export DISPLAY=$OLD_DISPLAY
    unset OLD_DISPLAY
    sleep 1
}

title="Webcam"
msg="Webcam"

case $ACTION in
    add)
        msg="$msg enabled"
    ;;

    remove)
        msg="$msg disabled"
    ;;
esac

user_loop "$(ls /usr/kde/*/bin/kdialog | tail -n 1) \
    --title \"$title\" --passivepopup \"$msg\" 3"
Now every time you turn wifi/bluetooth/webcam on/off a notification will appear near KDE's notification tray icon:

Saturday, July 31, 2010

Plasma NM, modem Sony MD300 and more...

During the time I implemented ModemManager support in Solid I did the tests with my Sony MD300 modem. For anyone to use this modem in Linux do this as root (or use sudo):

  1. Install networkmanager-0.8 and modemmanager-0.4;
  2. Create the file /etc/udev/rules.d/50-md300modem.rules with the follwing contents:





    1. ACTION!="add", GOTO="3G_End"
    2. SUBSYSTEM=="usb_device", ATTRS{idProduct}=="d0cf", ATTRS{idVendor}=="0fce", PROGRAM+="md300modem.sh %p"
    3. SUBSYSTEM=="usb", ATTRS{idProduct}=="d0cf", ATTRS{idVendor}=="0fce", KERNEL=="ttyACM*", SYMLINK+="modem3G-%n"
    4. LABEL="3G_End"
    
  3. Create the script /lib/udev/md300modem.sh with the following contents:





    1. #!/bin/sh
    2. echo 3 > /sys/$1/device/bConfigurationValue
    3. sleep 3
    4. # enables/activates the modem (turns radio on and registers to operator network).
    5. chat -V -s '' "AT +CFUN=1" 'OK' '' < /dev/ttyACM0 > /dev/ttyACM0
  4. Run: udevadm control --reload-rules;
  5. Click on Plasma NM's system tray icon -> Manage Connections -> Mobile broadband  -> Add -> GSM Connection and use the parameters:





    Number: *99#
    Username: <operator's username>
    Senha: <operator's password>
    APN: <operator's apn>
    Type: Any
    For instance my configuration is as follow:
    Number: *99#
    Nome do usuário: tim
    Senha: tim
    APN: tim.br
    Type: Any
    
    OBS: some cell phones, like my Samsung i8910, only connects if "Type" is set to "Any". The MD300 connects with any of the types listed.
  6. Hook up the modem to the USB port, wait until it powers up and register itself to the operator network (takes about 30 seconds to do both);
  7. In the Plasma NM initial window clicks on the connection you have created.
My modem connects only once in ethernet mode (default mode), to connect again I have to remove it from USB port and hook it up again. I do not know why that happens and one guy told me his MD300 does not behave like that. Oddly enough with wvdial and kppp, which uses ppp mode, it does have this problem.

To make it easier to set up a Mobile Broadband connection I have started to port the nm-applet connection wizard to KDE. It is still in early stage and I am working on it only during weekends. Probably it will be ready for KDE release 4.6 early next year. The initial window is like this:



It takes some time to understand how both nm-applet wizard and Plasma NM kcm modue work and since I can only work on it during weekends do not expected something usefull until September.

Wednesday, June 23, 2010

Sager NP7652: finally



Yesterday, I finally got my Sager NP7652 laptop (Clevo W765CUH barebone) in my hands. The LCD was replaced and there is no dead pixels (so far). I copied my Gentoo installation from my old Acer Ferrari 4005 to it to avoid the loooooong process of installing Gentoo from the begining, also because my Internet connection is slow and it would take almost a week to download the source code for all ebuilds. The configuration (click on the image to see it completely):





More info about this laptop on Xoticpc and Notebook Review.


TuxMobil - Linux on Laptops, Notebooks, PDAs and Mobile Phones

This report is listed at
TuxMobil - Linux compatibility guides for laptops, notebooks, PDAs, mobile phones and GPS devices.

ACPI

Battery
/proc/acpi/battery/BAT0/state does not show the "present rate", which prevents KDE's powerdevil to measure how much remaining time I still have. I had this problem with my Acer Ferrari 4005 too, a BIOS update solved the problem that time. Unfortunately Sager has discontinued this laptop, which was released less than six months ago, those notebook sellers must be kidding to discontinue a notebook so fast. So until I find a BIOS update to solve this problem I am using the kernel's CONFIG_ACPI_CUSTOM_DSDT feature to replace the BIOS's DSDT by one I have edited by hand. To use the new DSDT:

  1. Download it
  2. Enable  CONFIG_ACPI_CUSTOM_DSDT: make menu_config -> Power management and ACPI options -> ACPI (Advanced Configuration and Power Interface) Support -> Custom DSDT Table file to include. Select the downloaded file.
  3. Compile and install the new kernel.
  4. Reboot, that is it.

Here is the diff of the original DSDT.

Fans
The fans run at full speed since kernel boots up, but if you press the third hot key button (the one with a M surrounded by an elipse) the fans run quietly, this is called "silent mode". If you press it again the fans run at full speed again. OBS: the processor will *not* run at full power when in silent mode. OBS2: when using ATI proprietary drivers (ati-drivers ebuild) instead of the opensource drivers (xf86-video-ati ebuild) the fans run quietly.

Speedstep
Driver: acpi-cpufreq.ko.

I tried to use phc-intel to undervolt the CPU C-states but it did not work as expected. It seems this Core i7 620m CPU recognise the undervolt and automatically reduces CPU performance instead of allowing it to crash. Do not worry, the crash is part of the tweaking process to get the voltage values to configure the phc-intel module. I tried all values from 20 mW to 1 mV at 2667 MHz clock and the CPU did not crash but the performance decreased when compiling the kernel. Since this CPU has turbo mode capability I guess it is it that is automatically decreasing CPU performance to avoid the crash. The clock stayed at 2667 MHz, but compiling the kernel was much more slower using 1 mV than with 20 mW.

Suspend to Disk
I am using TuxOnIce for suspend to disk. To install it:

  • Apply the patch against the kernel.
  • Enable it  make menu_config -> Power management and ACPI options ->Enhanced Hibernation (TuxOnIce) -> File AllocatorSwap Allocator (if you have a swap partition), Userspace User Interface support and install the new kernel.
  • Install pm-utils ebuild/package: emerge -v pm-utils
  • Edit /etc/pm/config.d/gentoo and change the line with SLEEP_MODULE to SLEEP_MODULE="tuxonice". Now KDE's powerdevil plasmoid will use TuxOnIce to hibernate.

Sometimes some programs setfaults after resume (if one of them is the init program then system will crash). If I clean the swap space up (swapoff -a; swapon -a) before suspending then there is no segfault but that is damn slow if there several hundreds of MB in the swap file. Well, I tried a different approach and created a dedicated hibernate file that seems to also fix the problem and is pretty fast too, so do:

Configure Tux On Ice
# echo "TuxOnIce" > /hibernation-file
# dd if=/dev/zero bs=1M count=2048 >> /hibernation-file
# echo /hibernation-file > /sys/power/tuxonice/file/target
# cat /sys/power/tuxonice/resume
UUID=ea1d2e190cfe4901ac80645f47046980:0x56f8000

Change the resume kernel parameter to the new inode location:
Kernel parameter
resume=/dev/sda6:0x56f8000

Add the line below to /etc/hibernate/common.conf
/etc/hibernate/common.conf
ProcSetting file/target /hibernation-file


Bluetooth
Cambridge Silicon Radio bluetooth controller, driver: btusb.ko.

Card Reader
JMicron SD/MS Host controllers, Secure Digital driver: sdhci-pci.ko, Memory Stick driver: jmb38x_ms.ko. Tested with SD and MS PRO Duo cards. Not tested but should work as well: MS, MS PRO, MS Duo, Mini-SD, MMC and RS cards.

DVD Burning
Works as expected, at least when burning an iso image to a DVD-r media (8x speed).

Finger Print Reader
Works with fingerprint-gui 1.04, just execute the command below to avoid the error message "ABSOpen() failed -1086 (An internal error occurred (pt: tfmerr -1086).)":

mkdir -m700 /var/upek_data/

Hot Key Buttons
All buttons working:

  1. E-mail.
  2. Internet (Web Browser).
  3. Toggle Silient Mode (for power saving). When enabled, Silent Mode will reduce fan noise and save power consumption. Note this may reduce computer performance.

I have configured udev to make show a KDE notification when the wifi, bluetooth or webcam is activated / desactivated. You can do the same for the silent hot key button using khotkey section in KDE's systemsettings, no need to go for udev.

Modem
Does not work yet: Re: AW: agere softmodem HDA + Intel Ibex Peak High Definition Audio

Sata and e-Sata
Intel Ibex Peak 4 port SATA AHCI controller, driver ahci.ko. To compile the driver: make menu config -> Device Drivers ->  Serial ATA and Parallel ATA drivers ->  AHCI SATA support

This is what I do before switching my e-Sata HD off:

  1. umount all partitions.
  2. echo 1 > /sys/block/sdb/device/delete

When issuing the last command the following lines appears in dmesg:

[40049.014691] sd 4:0:0:0: [sdb] Synchronizing SCSI cache
[40049.014851] sd 4:0:0:0: [sdb] Stopping disk
[40049.341191] ata5.00: disabled



You configure hald and udisks to thread "e-sata" disks as removable. Udisks is the default disk manager in KDE SC 4.6.x, so it is preferable.

Sound Card
Intel Ibex Peak HDA sound card, driver: snd-hda-intel.ko. Playback and internal microphone tested with Skype, all working. I moved my old /etc/asound.conf to /etc/asound.ferrari, it is not needed anymore because this sound card multiplex audio streamings without dmix alsa plugin. I do not have any s/pdif receiver so I cannot test it.

Just a side note: when the power save mode is enabled (echo 1 > /sys/module/snd_hda_intel/parameters/power_save) every time you change the volumes with a mixer or some program starts to play something there is a short crack sound in the speakers. It sounds even when all volume channels are mute or using earphone. That is annoying, so I prefer to disable the power save mode (echo 0 > /sys/module/snd_hda_intel/parameters/power_save).

USB
Intel Ibex Peak EHCI controller, drivers: ehci-hcd.ko and uhci-hcd.ko.

Video
ATI HD4570 video card, driver: xf86-video-ati-6.13.0, firmware: radeon-ucode-20100408. Working with KMS+DRI2, Googleearth and Kwin's composite effects work together too!!!. To use the firmware enable make menuconfig -> Device Drivers -> Generic Driver Options -> Include in-kernel firmware blobs in kernel binary. Then type "radeon/R700_rlc.bin" in "External firmware blobs to build into the kernel binary", copy /lib/firmware/radeon/R700_rlc.bin to /usr/src/linux/firmware/radeon/ and compile the kernel.

Relevant ebuilds (packages) I am using:

  • kernel 2.6.33.4
  • xf86-video-ati-6.13.0
  • radeon-ucode-20100408
  • xorg-server-1.8.1-r1
  • mesa-7.8.2
  • libdrm-2.4.19

Proprietary Driver (fglrx.ko)
Using ati-drivers ebuild brings one big advantage: the GPU runs cooler and the fans run quieter (as quiet as in Windows 7). I think it also helps with battery time, but I have not measure it. That only works as long as Xorg is running, if you to go the console (Ctrl+Alt+F1) the GPU fans start to run at full speed. Going back to Xorg makes them run quiter again. The 3D performance is noticeably better with ati-drivers.

One disadvantage in using ati-drivers is that you have to disable KMS (kernel modsetting) and the radeon kernel module. Otherwise the LCD gets blank when Xorg starts and you will have to restart the notebook to restore the video card to the correct state. Using composite (3D effects) while playing movies usually makes the movie flicker. To solve that problem DRI2 and KMS were created but since we cannot use KMS with ati-drivers I thought I would have to disable the 3D effects when using mplayer. Fortunately there is no flicker :-). In my old notebook (Ferrari 4005, ATI x700 card) the flickering is very annoying. I still own the Ferrari 4005, anyone here wants to buy a Ferrari notebook? :-) The battery still holds 72% of the original manufacturer capacity (around 3400 mAh) and everything works in Linux, accept the svideo port and the card reader, which does not read SD cards anymore, but reads Memory Stick (weird, hugh?) It comes with a bluetooth mouse too.

Unfortunately several important aticonfig commands do not work with this card:

evolucao ~ # aticonfig --adapter=0 --od-getclocks --od-gettemperature
Adapter 0 - ATI Mobility Radeon HD 4500 Series
                            Core (MHz)    Memory (MHz)
           Current Clocks :    680           500
             Current Peak :    680           500
  Configurable Peak Range : [680-680]     [500-500]
                 GPU load :    0%
ERROR - Get temperature failed for Adapter 0 - ATI Mobility Radeon HD 4500 Series

GPU load always stays at 0% and the thermal sensors are not compatible with aticonfig. Everest in Windows 7 is able to get the GPU temperature. As you can also notice the GPU and Memory clocks cannot be changed.

VGA Port
Works as expected. KDE has this beautiful and effecient kcm module to configure multiple monitors and it works great with the ATI HD4570:


HDMI Port
Work as expected (both video and audio). You need to configure /etc/asound.conf to route audio to the sound card that the video card (ati 4570) registers or use pulseaudio.

Webcam
BisonCam NB Pro webcam, driver: uvcvideo.ko. To compile the driver: make menu config -> Device Drivers -> Multimedia support -> Video capture adapters -> V4L USB devices -> USB Video Class (UVC)

Wired Ethernet
JMicron JMC250 gigabit ethernet PCI-e, driver jme.ko. To compile the driver: make menu config -> Device Drivers -> Network device support ->  Ethernet (1000 Mbit) ->  JMicron(R) PCI-Express Gigabit Ethernet support

Wireless
Intel WiFi Link 6000, driver: iwlagn.ko, firmware: iwl6000-ucode-9.193.4.1.

Gentoo Specific
In /etc/make.conf:
  • CHOST="x86_64-pc-linux-gnu"
  • CFLAGS="-O2 -march=core2 -pipe -fomit-frame-pointer -msse3 -msse4 -mcx16 -mpopcnt -msahf"
  • LDFLAGS="${LDFLAGS} -Wl,-O1"
  • VIDEO_CARDS="vesa radeon"
  • ALSA_CARDS="snd-hda-intel usb-audio"
Symbolic link: /etc/make.profile -> ../usr/portage/profiles/default/linux/amd64/10.0/desktop/kde . It is ironic the fact that Gentoo use amd64 profile for an Intel processor.

    File /etc/modules.autoload.d/kernel-2.6
    microcode # for updating CPU's microcode
    acpi-cpufreq # for CPU frequency scaling
    cdc-acm # for my 3G modem
    fglrx # for the video card
    vboxdrv # for VirtualBox
    vboxnetflt # idem
    vboxnetadp # idem
    
    All other drivers are automaticaly loaded by udev during boot initialization. Except for fglrx.ko and the three VirtualBox drivers (vboxdrv.ko, vboxnetflt.ko, vboxnetadp.ko) all other drivers are included in the vanilla Linux kernel. fglrx.ko is compiled by the x11-drivers/ati-drivers ebuild and the three VirtualBox drivers are compiled by the app-emulation/virtualbox-modules ebuild

    Things yet to Test
    • Express card slot
    • Multi-gesture touchpad

    lspci output:
    00:00.0 Host bridge: Intel Corporation Arrandale DRAM Controller (rev 12)
    00:01.0 PCI bridge: Intel Corporation Arrandale PCI Express x16 Root Port (rev 12)
    00:16.0 Communication controller: Intel Corporation Ibex Peak HECI Controller (rev 06)
    00:1a.0 USB Controller: Intel Corporation Ibex Peak USB2 Enhanced Host Controller (rev 06)
    00:1b.0 Audio device: Intel Corporation Ibex Peak High Definition Audio (rev 06)
    00:1c.0 PCI bridge: Intel Corporation Ibex Peak PCI Express Root Port 1 (rev 06)
    00:1c.1 PCI bridge: Intel Corporation Ibex Peak PCI Express Root Port 2 (rev 06)
    00:1c.2 PCI bridge: Intel Corporation Ibex Peak PCI Express Root Port 3 (rev 06)
    00:1c.3 PCI bridge: Intel Corporation Ibex Peak PCI Express Root Port 4 (rev 06)
    00:1d.0 USB Controller: Intel Corporation Ibex Peak USB2 Enhanced Host Controller (rev 06)
    00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev a6)
    00:1f.0 ISA bridge: Intel Corporation Ibex Peak LPC Interface Controller (rev 06)
    00:1f.2 SATA controller: Intel Corporation Ibex Peak 4 port SATA AHCI Controller (rev 06)
    00:1f.3 SMBus: Intel Corporation Ibex Peak SMBus Controller (rev 06)
    02:00.0 VGA compatible controller: ATI Technologies Inc M92 [Mobility Radeon HD 4500 Series]
    02:00.1 Audio device: ATI Technologies Inc R700 Audio Device [Radeon HD 4000 Series]
    06:00.0 Network controller: Intel Corporation WiFi Link 6000 Series (rev 35)
    07:00.0 System peripheral: JMicron Technology Corp. SD/MMC Host Controller (rev 80)
    07:00.2 SD Host controller: JMicron Technology Corp. Standard SD Host Controller (rev 80)
    07:00.3 System peripheral: JMicron Technology Corp. MS Host Controller (rev 80)
    07:00.5 Ethernet controller: JMicron Technology Corp. JMC250 PCI Express Gigabit Ethernet (rev 03)
    ff:00.0 Host bridge: Intel Corporation QuickPath Architecture Generic Non-core Registers (rev 02)
    ff:00.1 Host bridge: Intel Corporation QuickPath Architecture System Address Decoder (rev 02)
    ff:02.0 Host bridge: Intel Corporation QPI Link 0 (rev 02)
    ff:02.1 Host bridge: Intel Corporation QPI Physical 0 (rev 02)
    ff:02.2 Host bridge: Intel Corporation Device 2d12 (rev 02)
    ff:02.3 Host bridge: Intel Corporation Device 2d13 (rev 02)

    lsusb output:
    Bus 002 Device 006: ID 5986:0343 Acer, Inc -> webcam
    Bus 002 Device 003: ID 147e:1000 Upek -> fingerprint reader
    Bus 002 Device 002: ID 8087:0020 
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
    Bus 001 Device 003: ID 03eb:0902 Atmel Corp. 4-Port Hub
    Bus 001 Device 002: ID 8087:0020 
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub