How To: Disable SELinux in Fedora

WARNING: by continuing following this guide you are putting your machine at risk by disabling the secuity features within SELinux, I strongly advise if you do not know what you are doing, stop and read up on the implications this action will have before continuing. Some information is avaible in the Fedora Wiki here .

Open up this file:

sudo gedit /etc/selinux/config

Change the line that looks like this:

SELINUX=enforcing

To this:

SELINUX=permissive

Save and reboot and it should be working, although again be warned this has disabled the security mechanism on your system. To re-enable this, simply do the same however change from permissive to enforcing and again reboot your machine.

How To Fix: Error: Cannot retrieve repository metadata (repomd.xml) for repository: Dropbox. Please verify its path and try again

After installing dropbox from the RPM package availble on the site on a new Fedora 15 install, I was unable to use yum without coming across this error:

$ update
Loaded plugins: langpacks, presto, refresh-packagekit
http://linux.dropbox.com/fedora/15/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found : http://linux.dropbox.com/fedora/15/repodata/repomd.xml
Trying other mirror.
http://linux.dropbox.com/fedora/15/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found : http://linux.dropbox.com/fedora/15/repodata/repomd.xml
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: Dropbox. Please verify its path and try again

For some unknown reason dropbox repos dont seem to work past 13 so you’ll need to change the dropbox.repo file from detecting the current release to 13 like so:

Open the dropbox.repo file:

sudo gedit /etc/yum.repos.d/dropbox.repo 

Change the baseurl from $relesever to 13 like so:

Original:

[Dropbox]
name=Dropbox Repository
baseurl=http://linux.dropbox.com/fedora/$releasever/
gpgkey=http://linux.dropbox.com/fedora/rpm-public-key.asc

New:

[Dropbox]
name=Dropbox Repository
baseurl=http://linux.dropbox.com/fedora/13/
gpgkey=http://linux.dropbox.com/fedora/rpm-public-key.asc

Save and close and everything should be working, try using sudo yum update to check and the error should have gone away. If not give a reboot a try.

HowTo: Disable Mouse Scroll to Switch Desktop – OpenBox

Open up the openbox config file, it should be located in /home/username/.config/openbox/ but if it’s not you might have to do a little digging.

nano /~.config/openbox/rc.xml

Find the following lines and remove or comment them out, you can use Ctrl+W in nano to find:

      
        
      
      
        
      

Note: XML comments are as follow:<-- Comment -->

Save with Ctrl+X, Y, Enter (if you’re using nano) and restart OpenBox (Preferences -> OpenBox Config -> Restart) and all should be done.

Kinect Development – Day 1

Head over to this page if you want some tutorials on getting started with the Kinect and libfreenect, I’ll update more as time goes on and I have free time.

I’ve been meaning to grab myself an Xbox 360 Kinect for a while, not because I’m a big motion controlled game fan but for machine vision development. Within the first month of the Kinect open source drivers being released the coolest things were seen, from motion controlled media centres to 3D modelling. I’ll admit, I’m a little late to the game, mostly due to the amount of work in my final year at university and other general business. Over the summer I’ll have plenty of time to do a couple of projects and hopefully come up with something cool and contribute to the scene.

Anyway enough of the small talk, I’ve decided to blog in as much detail the journey through the development, from the installation of the libraries to writing the first and last bit of code as a sort of a set of tutorials for anyone else who wants to get into it.

There are currently two main sets of drivers/libraries out there libfreenect and OpenNI both sporting hip, cool, open source names. So which one do you choose? Well, here’s a brief description of both.

Let’s start with OpenNI, these are the Official PrimeSense (the people that Microsoft paid to actually create the Kinect) these allow access to audio, video and depth with the addition of PrimeSense’s NITE Middleware. NITE is the software library used for skeletal tracking, hand gesture recognition and scene analyzer (used to separate figures in the foreground from the background) .

Alternatively there is the libfreenect libraries, from the community over at openkinect.org. While these are admittedly lacking slightly in features such as skeletal tracking and hand gesture recognition they much make up for it in the dedication to open source and the creation of the best suite available. These have access to video, microphones, motors and LED with speakers currently being worked on. They work under a variety of language wrappers for most OS’s and will of course by my personal library of choice.

Fortunately, you won’t have to decide which one you’d prefer ’cause you can run them both on the same machine but you’ll have to look into licencing information for releasing projects with OpenNI so it’s unlikely you’ll want to combine them (or even allowed?).

libfreenect Installation:

OpenKinect’s getting started page provides a well enough documented installation guide that anyone should be able to get them up and running under Windows/Linux or OSX. With Ubuntu being the distro of choice for installation guide. - http://openkinect.org/wiki/Getting_Started

If you’re running Arch, there are a few AUR packages available however they all seem to have lacked updates for a few months but the manual build is pretty simple on the getting started page, I’ve also added a quick list of commands to get you there:

Grab the git copy of the libraries:

git clone https://github.com/OpenKinect/libfreenect.git
cd libfreenect/

Make, install:

mkdir build
cd build/
cmake ..
make
sudo make install
sudo ldconfig /usr/local/lib64/

Add your user to allow access to the connect by creating a group called video and adding your user to it:
note: this can be skipped if you don’t mind running as root/sudo

sudo nano /etc/udev/rules.d/66-kinect.rules
sudo usermod -G video username

Test the kinect with the example program:

bin/glview

If all went well you should have seen a sight similar to the screenshot above, if not check out the OpenKinect page for more information and see if the problems you’re having haven’t already been resolved.

OpenShot, libmp3lame and Ubuntu

If you’re getting the following error while trying export a video under several different codecs in OpenShot including AVI, MOV and MPEG using (mpeg2, mpeg4 or h.264) chances are this might help you with that error.

The following formats/codecs are missing from your system:

libmp3lame

You will not be able to use the selected export profile. You will need to install the missing formats/codecs or choose a different export profile.

This is a simple fix:

  • Open up Synaptic Package Manager
  • Search “libavformat”,
    • If the current package installed is “libavformat52″ select “libavformat-extra-52″ (alternativly “libavformat-unstripped-52″ should also work).
    • Else the package might be “libavformat53″ so simply change to “libavformat-extra-53″, basically it might end in different numbers, it should work the same.
  • Hit Apply and approve the changes.

HowTo: Remove Every Other Line in Text Files – Linux

Let’s say you’ve got a text file, of any size, big or small, and you want to remove every other line of that file, well here are a few commands in Linux that allow you to do this.

Example, you want to get from this:

1
2
3
4
5
6
7
8
9
10

To this:

1
3
5
7
9

The sed way:

 sed -n "p;N;" file.txt > newfile.txt

The awk way:

 awk 'NR%2 != 0' file.txt > newfile.txt

Here you can actually specify N lines, replace 2 in the above command and you’ll be able to take out every N’th number. As an example, here’s the above replaced with a 3 on the file:

1
2
4
5
7
8
10

Easy as pie, right?

Installing packages from CD in Arch Linux

Okay, so you have Arch Linux installed and let’s say you’re wifi isn’t working and you need the package “iwlwifi-3945-ucode-15.32.2.9-2-any.pkg.tar.gz” to fix this but you don’t have a wired connect. What do you do? Blast in your Arch cd, mount it, mount the packages sqfs file and install using pacman.

Mount cdrom:

mkdir /mnt/cdrom/
mount /dev/cdrom /mnt/cdrom/

Mount *-pkgs.sqfs:

mkdir /mnt/pkgs/
mount -o loop core-pkgs.sqfs /mnt/pkgs/
cd /mnt/pkgs/

Install pkg.tar.gz:

pacman -U package-name.pkg.tar.gz

How To Fix “Fatal server error: no screens found” | Ubuntu

If you’re running off a live USB disk or changing your graphics card the error below might appear when Xorg is looking for the wrong drivers or device. You might also get this error while using the Nvidia drivers, I found however this was caused by some of the extra options added into the xorg.conf file (usually located /etc/X11/xorg.conf). If the case is that it’s a problem with the aditional options I suggest making a backup of the file and attempting to comment out (#) aditional options, this will need a bit more of an expert eye to see what isn’t needed though.. You can also use the following to rollback to a working version when using the Nvidia drivers.

There is a pretty simple fix, if it is caused by broken or changed xorg.conf file:

Fix:
Make a backup of your current Xorg.conf, just in case something goes even more wrong and it can be easily restored:

sudo cp /etc/X11/xorg.conf /etc/X11/xorg.bckup 

Now you’ll want to restore the failsafe (sometimes called xorg.conf.backup) config to be used as the default:

sudo cp /etc/X11/xorg.conf.failsafe /etc/X11/xorg.conf

Yeah, it was that simple (if this error was caused by a broken or changed xorg.conf anyway. So you can continue and start the x server with:

startx

Error:

X.Org X Server 1.9.0
Release Date: 2010-08-20
X Protocol Version 11, Revision 0
Build Operating System: Linux 2.6.24-27-server i686 Ubuntu
Current Operating System: Linux ubuntu 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 i686
Kernel command line: noprompt cdrom-detect/try-usb=true persistent file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash -- maybe-ubiquity
Build Date: 16 September 2010  05:39:22PM
xorg-server 2:1.9.0-0ubuntu7 (For technical support please see http://www.ubuntu.com/support)
Current version of pixman: 0.18.4
 	Before reporting problems, check http://wiki.x.org
	to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
	(++) from command line, (!!) notice, (II) informational,
	(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Fri Mar  4 11:35:54 2011
(==) Using config file: "/etc/X11/xorg.conf"
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
(EE) No devices detected.

Fatal server error:
no screens found

Please consult the The X.Org Foundation support
	 at http://wiki.x.org
 for help.
Please also check the log file at "/var/log/Xorg.0.log" for additional information.

 ddxSigGiveUp: Closing log
giving up.
xinit: No such file or directory (errno 2): unable to connect to X server
xinit: No such process (errno 3): Server error. 

Using pdfcrop to Remove White Margins | Ubuntu

One of the most annoying things about PDF files are their fixed font size, the only real way of getting a better view at the text is to zoom the whole page in. This isn’t really a fix for that annoyance but it’s a way of getting more info to screen ratio by removing the wasted white space around the body of the file for each page, this really comes in useful when displaying PDF files on your Kindle, Nook, Smart Phone or other eBook Readers.

 sudo apt-get install texlive-extra-utils

It’s really simple to use and by default it crops all the white space from around an image, it does this per page rather than for the entire document which allows for the best results (as long as you don’t mind changes in font size when you’re reading it).

Change input.pdf to the name of the file you want to crop and output.pdf to the output cropped file.

 pdfcrop input.pdf output.pdf

Some PDFs have better results than others and some PDFs will look the same on eBook readers if they crop the whitespace, but it’s a useful tool to have for some of those old pesky JPEG PDF files with massive borders all the way around.

Example: Left = input, right = output

Some PDF files seem to bring up the following error:

!!! Error: Ghostscript exited with error code 1!

I’m currently not sure what causes this, possibly something to do with the encoding type of the PDF? or maybe just some missing dependencies..

For more info about pdfcrop check out the Ubuntu Manpage: http://manpages.ubuntu.com/manpages/gutsy/man1/pdfcrop.1.html

Auto Sync Kindle in Ubuntu

For Christmas I got a Kindle 3 and it was instantly filled with Free eBooks (http://www.gutenberg.org/wiki/Main_Page) and research papers (PDFs). I found myself wanting to be able to automatically synchronize it with a folder on my desktop when it was plugged in and found no one else had posted online how to do this, so I began researching into udev and rsync to get something working.

Setting up udev rules to run a script when the Kindle is plugged in.

Firstly, we need to find some parameters of the Kindle which are unique to it so that udev can identify that it is the Kindle being plugged in and not another USB mass storage device. We’ll need to find out where the device is mounted in /dev/ which can be a little tricky because this folder is pretty full.

An easier way to do this is to first, without the Kindle plugged in do the following command (list the directory and pipe the output to a file called dev1 in the home dir):

ls /dev/ > ~/dev1

Now plug the Kindle in and redo the command, changing the destination output:

ls /dev/ > ~/dev2

The difference between the two files will show what has changed in the /dev/ directory:

 sdiff ~/dev1 ~/dev2

The output for mine (show in the image below) shows that 3 things changed when I plugged in the Kindle, sdb, sdb1 and sg2 directorys were added (shown by the > sign to the left). The folder I am looking for is the sdb1, this is where the mass storage device is found.

Write down where it’s found in /dev/ and then you can clean up those two files you previously made:

rm ~/dev1 | rm ~/dev2

The next thing we want to do is use udevadm to collect some useful information about the device which we can do by the following command (I have chosen to pipe the output to a file called kindle in the home dir, because the output was pretty big. If you don’t want to remove the > ~/kindle from the end of the command):

udevadm info -a -p $(udevadm info -q path -n /dev/sdb1) > ~/kindle

WARNING: This can look pretty daunting but, (in the words of Douglas Adams) Don’t Panic.

  looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/host21/target21:0:0/21:0:0:0/block/sdb/sdb1':
    KERNEL=="sdb1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{partition}=="1"
    ATTR{start}=="16"
    ATTR{size}=="6410672"
    ATTR{alignment_offset}=="0"
    ATTR{discard_alignment}=="4294959104"
    ATTR{stat}=="     151     3389     4239     3776        0        0        0        0        0     2424     3776"
    ATTR{inflight}=="       0        0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/host21/target21:0:0/21:0:0:0/block/sdb':
    KERNELS=="sdb"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{range}=="16"
    ATTRS{ext_range}=="256"
    ATTRS{removable}=="1"
    ATTRS{ro}=="0"
    ATTRS{size}=="6410688"
    ATTRS{alignment_offset}=="0"
    ATTRS{discard_alignment}=="0"
    ATTRS{capability}=="51"
    ATTRS{stat}=="     156     3389     4279     3808        0        0        0        0        0     2456     3808"
    ATTRS{inflight}=="       0        0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/host21/target21:0:0/21:0:0:0':
    KERNELS=="21:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="3"
    ATTRS{vendor}=="Kindle  "
    ATTRS{model}=="Internal Storage"
    ATTRS{rev}=="0100"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0xe1"
    ATTRS{iodone_cnt}=="0xe1"
    ATTRS{ioerr_cnt}=="0x1"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{dh_state}=="detached"
    ATTRS{queue_depth}=="1"
    ATTRS{queue_type}=="none"
    ATTRS{max_sectors}=="240"

While this many look daunting, what you want to do if find some attributes from the output which mean only your Kindle will be found when looking for them all, the problem I have found is that, with udev rules you cannot go too far down in the parent tree which stops me being able to use the Kindles serial to identify it. This could mean that my computer will sync any Kindle that’s plugged into it but I don’t have 2 to check. The following are the attributes I chose:

KERNEL=="sd?", ATTRS{vendor}=="Kindle  ", ATTRS{modalias}=="scsi:t-0x00"

Now you’ll want to write the udev rule in /etc/udev/rules.d/

cd /etc/udev/rules.d/

According to the readme the numbers represent the priority of the rule (higher overriding lower) followed by a descriptive name and it must end in .rules eg (xx-description.rules).

sudo gedit 81-kindle-sync.rules

The following is the whole line I used for the udev rule, the only addition to the above is the RUN+=”/home/alex/.scripts/kindlesync.sh” which will run the script in that directory, this script contains the rsync command.

KERNEL=="sd?", ATTRS{vendor}=="Kindle  ", ATTRS{modalias}=="scsi:t-0x00", RUN+="/home/alex/.scripts/./kindlesync.sh"

Save and close the file and then restart the udev service:

sudo service udev restart

Writing a script to sync a folder on the Desktop with a folder on the Kindle using rsync:
Change the first directory from “/home/alex/ebooks/kindle_sync” to the directory on your computer where you want to keep the files that will be synced onto your Kindle and the second from “/media/Kindle/documents/sync/” to the location on your mounted Kindle where you want the files to be stored, save this file as kindlesync.sh. This is the script you call from the udev rules so for mine it’s saved as “/home/alex/.scripts/kindlesync.sh”.

#!/bin/bash

#Sync
rsync -av /home/alex/eBooks/kindle_sync/ /media/Kindle/documents/sync/

Go to the location of the script and make it executable with the following command:

chmod +x kindlesync.sh

Now try plugging in your Kindle and make sure it syncs up!

Problems

In the udev rule, ACTION==”add” can be used to specify when the Kindle is first plugged in, however when trying to use this Ubuntu’s auto-mounting service mounts the drive after the script is ran so the sync becomes useless. Without this it runs the script 3 times, twice before it has mounted and then once it has mounted – this is currently the best I have found but it’s extremely messy.