Webcam not working in Skype

I never have the need of using the webcam of my lenovo T440s. So in more or less a year of usage, I never found this bug: Skype doesn’t automatically find the integrated camera.

SkypeBut, why?

In general, all the currently versions of the available Linux kernels support many webcams drivers which now only support Video 4 Linux version 2 (V4L2).
Legacy Video 4 Linux API has been dropped, but some applications (Skype is one of these) only support the older version of V4L.

Found the bug, found the solution: preloading of V4L library!

ATTENTION!!! I tested the following procedure for an x86-64 machine.

Please, report all the bugs you can encounter if you use the procedure for an x86 machine.

Skype is a 32-bit application, so for an x86-64 machine you have to install the lib32-v4l-utils package, released from the multilib repo.

$ yaourt -S lib32-v4l-utils

Then you can try to run skype in the following way:

$ LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so skype

For an x86 machine, you can try in this way:

$ LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype

What changes is the path to find the library.

But it returns an error like this, to me:

ERROR: ld.so: object '/usr/lib32/libv4l/v4l1compat.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.

I solved the trouble in the following way (I know that is not the best way and it is not so elegance, but I’m very ignorant about LD_PRELOAD and I don’t have enough time now to study it).

Create the file /usr/local/lib/skype and fill it with the first code for an x86 machine, whit the second code for and x86_64 machine:

#! /bin/bash

cd /usr/lib/libv4l
LD_PRELOAD=v4l1compat.so /usr/lib32/skype/skype;

#! /bin/bash

cd /usr/lib32/libv4l
LD_PRELOAD=v4l1compat.so /usr/lib32/skype/skype;

Then, change the access permission of the bash script:

$ sudo chmod 770 /usr/local/lib/skype

so it can be executed not only by root.

Now, if you want to call skype without writing the complete path, simply create an alias:

alias skype='/usr/local/lib/skype'

and put in .bashrc, or in .bash_aliases if you have the following line in your .bashrc:

source ~/.bash_aliases

Close the terminal and open a new one, then calling skype you will execute the script in /usr/local/lib/.

In the end a simple trick: if you need to setup the parameters of your webcam, you need to install the package v4l2ucp from official repository.

Happy hacking and GWH!!!

About Francesco Serafin

I am a PhD student at the Department of Civil, Environmental and Mechanical Engineering at the University of Trento. My two greatest loves: Computer Science and Water (take three with my Lenovo!:D). As a result, the aim of my life is to make both passions coexist. My gpg public key available at https://pgp.mit.edu

Leave a Reply

Your email address will not be published.

*