我尝试在 Ubuntu 13.04 上运行 Skype,当我的网络摄像头与其他应用程序(如 Cheese)一起使用时,得到的是黑色空白而不是我的网络摄像头输入。
传统的解决方案是运行
LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so /usr/bin/skype
然而,这种方法现在行不通了,
$ LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so /usr/bin/skype
ERROR: ld.so: object '/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so' from LD_PRELOAD cannot be preloaded: ignored.
$ locate v4l1compat.so
/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so
/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so
file `which skype`
/usr/bin/skype: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xe7a4372f77f31bca55d7b0e26422b8901d916e51, stripped
我也尝试过不使用 ld_preloading。为什么 LD_PRELOAD 会失败?其他人有没有成功过?
答案1
使用以下命令启动 skype
LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so skype
如果这不起作用,请确保先安装 32 位 libv4l-0 包。
您的 Skype 是 32 位版本,因此需要 32 位 libv4l-0 包(即使您的 ubuntu 是 64 位)。如果您没有,请通过以下命令安装。
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libv4l-0:i386
如果您不想在每次启动 Skype 时都输入这个长命令,您应该编辑该/usr/share/applications/skype.desktop
文件并在 Exec 行中添加以下内容,使其看起来像这样:
Exec=sh -c 'LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so skype'
答案2
尝试:
-c 'LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so skype'