当 Skype 已在运行时,如何阻止它启动另一个实例?

当 Skype 已在运行时,如何阻止它启动另一个实例?

更新

这个问题最终在 Linux 版 Skype 4.0.0.7 中得到解决。对于直接从网站安装 Skype 的用户来说,这个问题将不复存在。版本 4.0+ 将包含在 Quantal(Ubuntu 12.10)的 Universe 存储库中。


令人讨厌的 Skype 但(可能存在另一个 Skype 实例)

这里只需要修复一些不必要的烦恼:

假设您正在运行 Ubuntu 版 Skype。您不小心再次点击了启动器。现在的情况是,Skype 启动了第二个实例,它会立即告诉您无法登录。另一个实例已经在运行。更糟糕的是:下次正常启动 Skype 时,由于“登录失败”,您将不得不重新输入已保存的密码。

我以为这个问题很快就会得到解决,但 Canonical 和 Microsoft 都不太在意。至少在过去的三次更新中,这个问题依然存在。因此,为了提供一种解决方法,我将发布我为防止这种行为所采取的措施。也许这对你们中的一些人有用。也许它会提高人们的认识并导致修复。

顺便说一句,我很高兴能找到更好的解决方案。这就是我提问的真正目的。通常我不会亲自回答这些问题。那么有谁知道更好的解决方案来修复 Skype 的双实例吗?

答案1

因此,我采取了以下措施来防止 Skype 启动另一个实例:

我已将可执行文件重命名为:

mv /usr/bin/skype /usr/bin/skype.bin

原始 skype 可执行文件将链接到一个脚本,该脚本仅在没有其他实例运行时启动 skype(此处为软链接)。这是我调用的小脚本skype-wrapper.sh。它检查用户是否已在运行 skype:

#!/bin/bash
# Use this instead of the Skype executable in '/usr/bin/skype' to prevent
# Skype from running another instance. Rename the executable to 'skype.bin'
# beforehand.

if [ $# -gt 0 ]; then
    /usr/bin/skype.bin $@
elif [ ! -n "$(lsof /usr/bin/skype.bin | grep $USER)" ]; then
    /usr/bin/skype.bin 
fi

您可以将其链接到 skype 可执行文件的原始名称,如下所示:

ln -s /home/con-f-use/bin/skype-wrapper.sh /usr/bin/skype

当然,这有一个缺点:Skype 更新后,必须重新重命名可执行文件并链接脚本。

再次,寻求更好的解决方案,甚至修复 Skype 本身(看着微软:-)

编辑:正如评论中所说,Skype 的通知图标存在一个小问题(单击它不会切换隐藏/显示 Skype 窗口)。现在已修复(并使用 Ubuntu 10.04、11.04 和 12.04 进行了测试)。

编辑 2:使用 www.skype.com 提供的最新版本(撰写本文时为 4.0.0.7),而不是当前存储库中的版本,错误已修复。我预计修复后的版本最终会进入 Ubuntu 存储库。

相关内容