Ubuntu上安装QQ2015
先不卖关子直接上图:Ubuntu 14.04.5 LTS

Deb包下载地址:
http://www.longene.org/download/WineQQ7.8-20151109-Longene.deb
http://pan.baidu.com/s/1kTu9ZUZ
下载完成后双击会跳转到Ubuntu Software Center中安装,如果提示未经认证的deb包源请忽略继续安装;32位依赖库的问题请自行解决,可以百度或者谷歌关键字ubuntu 安装32 bit依赖库;
我特意创建了ubuntu兴趣爱好者群,有兴趣的可以加群 326916374
导语
本文的目的不在于安装一个qq到Ubuntu,而是在2年零几个月从2012版wineQQ到现在这个2015版的的使用心得以及一些思考,主要给有同样兴趣爱好的Ubuntu粉丝们提供一个参考。
为什么要在Ubuntu上安装QQ?
很多人第一时间会说我离开windows会无法正常工作,我离开QQ无法找到其他IM工具,嗯哼 这算是个灰常实际的说辞或者借口,其实5年前我一开始接触Ubuntu10.04的时候也是这么想的,但是5年后的我,即便是使用Ubuntu 2年后的我却已经不会这么想了?为什么?因为工作上学习上平时在windows上能够用到的一切我都在Ubuntu上找到对应的替代产品了,所有,一切...
那为什么还要反过头来写这篇文章?嗯...闲的...好吧 其实这次的理由是我现在所在的公司都是统一使用QQ做工作用IM,说正经的,有些人高高在上当领导做事全是拍屁股决定,从最初QQ切到Skype再到QQ来回折腾3次,所有人都得跟着他走容不得任何异议,这样的领导可想而知整个公司是怎么的一个日常运行? 不用我说都能想象,好在属于异地开发,眼不见心不烦我不用那么烦心,作为一个专心搞技术的程序员,我还是要不断的学习才对!
于是,我自己买了intel nuc i5 6代的小盒子,丢掉了公司配备的i5 4代标配笔记本电脑,自己买了显示器、机械键盘等等一切,这一些才是继续学下去的保障。
好吧,周围人都是qq来qq去的,每天语音过来语音过去手机根本扛不住,只能在16G内存、固态硬盘的小盒子上装QQ了,现在说说使用体验...
Wine版QQ2015使用体验
这个2015版QQ使用起来大概吃掉我2g多接近3g的内存,不过对于16g的总容量来说小菜一叠,已经使用2、3个月了,语音、视频、远程协助、群组、讨论组、表情什么的只要你能想的到的都支持,总而言之够用了。除了就是随着时间的推移这个QQ的功能可能会落后最新的QQ很多而导致不兼容的情况,这个是个问题,但目前来看至少2年内不会有太大问题。
Wine版QQ2015使用中的坑

如右边图片,第一次安装完毕点击这个QQ启动程序是可以正常弹出登陆界面进行登陆的,但是关了机再运行就出问题了:
Application tried to create a window, but no driver could be loaded.
The explorer process failed to start.
你仔细看下/usr/share/applications/QQ启动程序脚本里面怎么写得会发现,点击之后应用启动的最终脚本是这个/opt/longene/qq/qq.sh
这个shell脚本告诉我们qq的启动是用一个自己打包带走的wine 1.7版本最终运行的,期初我遇到这个问题并看到下面第一个脚本我就打算自己装一个最新的wine来启动,但是不幸的是登陆框昙花一现后就say good bye了,oh no ,尝试了一个下午还是失败,不用怀疑肯定是longene团队对这个打包带走的wine 1.7做了调整以适应这个QQ2015
ok,不过细心一点我发现longene团队的这个qq会在home目录下产生一些缓存文件,于是请看下面第2个脚本中红颜色的那行,删掉这些后longene的QQ2015成功复活,O(∩_∩)O哈哈哈~
这就完了?
oh no, 还没完,电脑重启后回来即便删掉这些缓冲文件还是会报上面的错误,oh my god,终于反复的观察Terminal中的输出,发现一个特点就是要保证longene Wine QQ2015正常并且反复的可以运行,必须保证wine server的正常运行,举个例子吧:就是java程序员要能够跑起来,那必须保证jre是活着的,就这么一个道理。
于是,每次关机再开机后wine server必然是被由于上次的环境配置问题导致无法正常启动,那上面使用过最新的wine试图启动longene的QQ2015失败后再回头来用longene打包的wine1.7就可以跑了呢?道理很简单,当我试图用最新的wine跑longene的QQ2015的时候成功的清洗掉了导致wine1.7的wine server无法正常再次启动的环境配置,于是呢我专门写了下面第2个脚本:
- 运行第二个脚本并带上-c参数在每次开机或者环境故障的时候
- 当每次关掉qq又想释放掉wine占去的那么多内存那就带上-k来杀掉wine 1.7的 wine server
- 如果关掉qq在没有关机重启的情况下想再次启动那就不必带上任何参数
欧克,虽然简单粗暴好不讲道理,但是基于没有更多的时间去处理更具体的原因造成这种情况,但是目前来看问题已经解决,而且自己安装一个最新的wine跟longene QQ2015打包带走的wine1.7并无冲突,而且自己可以使用最新的wine来把玩其他别的windows程序,也是无伤大雅、其乐无穷啊 O(∩_∩)O哈哈哈~
#!/bin/bash set -e
export LANG=zh_CN.utf8 #Longene Dir
LONGENE_DIR=/opt/longene
#Wine Program Main Dir
WINE_DIR=$LONGENE_DIR/qq/wine-lib
#WINPREFIX Dir
WINEPREFIX_DIR=$HOME/.longene/qq
#Wine APP Dir
WINEAPP_DIR=$LONGENE_DIR/qq
#Current App Dir
QQ_DIR=$LONGENE_DIR/qq #Current User
#RUNUSER="`basename $HOME `"
RUNUSER=`whoami`
PACKAGE_NAME=wine-qq7.-longeneteam
TAR_NAME=qq7..tar.bz2
WINELIB_TAR=wine-lib.tar.bz2 #QQ_USER_DIR="$WINEPREFIX_DIR/drive_c/Program\ Files/Tencent/QQ" function runhelp
{
echo "************************************************************************"
echo "* Wine-QQ2013-By Longene Team -- build 20131120"
echo "* Contact Us By http://www.longene.org"
echo "* "
echo "* Commands:"
echo "* -u/--uninstall Uninstall Wine-QQ2013 if you don't like"
echo "* -d/--debug Open debug channel. Log file is in your home directory"
echo "* -h/--help The fucking help information as now you are reading"
echo "* -k/--kill execute wineserver -k to kill all wine programs"
echo "* -reg/--regedit start regedit editor"
echo "* -cfg/--winecfg start winecfg"
echo "************************************************************************"
} function uninstallpackage
{
echo "* Remove wine-qq7.8-longene..."
read -p "* Are you sure? (Y/N)" ANSW
if [ "$ANSW" = "Y" -o "$ANSW" = "y" -o -z $ANSW ];then
sudo dpkg -P $PACKAGE_NAME
echo "Removing....." else
exit
fi
} function check_owner
{
WINEPREFIX_DIR_USER=`stat -c %U $WINEPREFIX_DIR`
if [ "$RUNUSER" != "$WINEPREFIX_DIR_USER" ];then
sudo chown $RUNUSER $WINEPREFIX_DIR
echo "* Modifying the owner of $WINEPREFIX_DIR"
fi
} function check_firstrun
{
# echo "Check firstrun...."
if [ ! -e $WINEPREFIX_DIR/firstrun ];then
echo "* Seems the first time to run. Here we go!"
# $QQ_DIR/longene_gtk
$QQ_DIR/firstrun $WINEPREFIX_DIR/firstrun &
# echo "Bingoo" >$WINEPREFIX_DIR/firstrun
fi
} function runapp
{
check_firstrun
if [ ! -e "$WINE_DIR/bin/wine" ]; then
tar -jxf $QQ_DIR/$WINELIB_TAR -C $QQ_DIR
rm -f $QQ_DIR/$WINELIB_TAR
if [ ! -e "$WINEPREFIX_DIR/drive_c/Program Files/Tencent/QQ/Bin/QQ.exe" ]; then
mkdir -p $HOME/.longene
tar -jxf $QQ_DIR/$TAR_NAME -C $HOME/.longene
rm -f $QQ_DIR/$TAR_NAME
fi
touch $WINEPREFIX_DIR/firstrun
fi
WINEDEBUG=-all env WINEPREFIX=$WINEPREFIX_DIR $WINE_DIR/bin/wine $WINEPREFIX_DIR/drive_c/Program\ Files/Tencent/QQ/Bin/QQ.exe
} function debugapp
{
echo "* Starting debug channel......."
echo "* Log file will be created in your Home:/Longene_qq2012.log"
echo "* You can upload the log on our site for help: http://www.longene.org" #find $LONGENE_DIR -type f -exec $QQ_DIR/md5sum {} + >$HOME/Longene_qq.log
#echo "*********************************************" >>$HOME/Longene_qq.log
env WINEPREFIX=$WINEPREFIX_DIR $WINE_DIR/bin/wine $WINEPREFIX_DIR/drive_c/Program\ Files/Tencent/QQ/Bin/QQ.exe >$HOME/Longene_qq.log >&
} case $ in
"--uninstall"| "-u")
uninstallpackage
;;
"--debug"| "-d")
debugapp
;;
"--kill"| "-k")
env WINEPREFIX=$WINEPREFIX_DIR $WINE_DIR/bin/wineserver -k
;;
"--regedit"| "-reg")
env WINEPREFIX=$WINEPREFIX_DIR $WINE_DIR/bin/regedit
;;
"--winecfg"| "-cfg")
env WINEPREFIX=$WINEPREFIX_DIR $WINE_DIR/bin/winecfg
;;
"--help"| "-h")
runhelp
;;
*)
if [ -z $ ];then
runapp
else
echo "Invalid option:$1"
runhelp
fi
;;
esac
这个是我自己另外写的一个辅助性shell脚本:
#!/bin/bash
WINEPREFIX_DIR=$HOME/.longene/qq/ function runhelp
{
echo "************************************************************************"
echo "* Help"
echo "* Commands:"
echo "* -c/--clean 清理数据"
echo "************************************************************************"
} function runclean
{
env WINEDLLPATH=/opt/longene/qq/wine-lib/lib/wine WINESERVER=/opt/longene/qq/wine-lib/bin/wineserver WINEPREFIX=$WINEPREFIX_DIR wine $WINEPREFIX_DIR/drive_c/Program\ Files/Tencent/QQ/Bin/QQ.exe >$HOME/Longene_qq.log >&
sleep
bash /opt/longene/qq/qq.sh&
sleep
rm $WINEPREFIX_DIR/dosdevices/*::
} function runapp
{
bash /opt/longene/qq/qq.sh&
} case $1 in
"--clean"| "-c")
runclean
;;
"--kill"| "-k")
bash /opt/longene/qq/qq.sh -k
;;
"--help"| "-h")
runhelp
;;
*)
if [ -z $1 ];then
runapp
else
echo "Invalid option:$1"
runhelp
fi
;;
esac
Ubuntu上安装QQ2015的更多相关文章
- [异常解决] ubuntu上安装JLink驱动遇到的坑及给后来者的建议
一.前言 最近将整个电脑格式化,改成了linux操作系统 希望这样能让自己在一个新的世界探索技术.提升自己吧- win上的工具用多了,就不想变化了- 继上一篇<ubuntu上安装虚拟机遇到的问题 ...
- Ubuntu上安装Robomongo及添加到启动器
到目前为止,Robomongo仍是MongoDB最好的客户端管理工具,如需在Ubuntu上安装Robomongo,可直接从官网下载.tar.gz压缩包进行解压,然后直接运行bin目录下的robomon ...
- 在 Ubuntu 上安装 Android Studio
在 Ubuntu 上安装 Android Studio http://www.linuxidc.com/Linux/2013-05/84812.htm 打开terminal,输入以下命令 sudo a ...
- Ubuntu上安装Karma失败对策
在Ubuntu上安装Karma遇到超时 timeout 错误.Google了一下,国外的码农给了一个快捷的解决方案,实测可行,贴在这里: sudo apt-get install npm nodejs ...
- 在Ubuntu上安装LAMP服务器
1.安装Ubuntu上安装LAMP apt-get install lamp-server^ 2.安装过程中设置MySql密码 3.测试 创建index.php var/www/html/index. ...
- [译]How to Setup Sync Gateway on Ubuntu如何在ubuntu上安装sync-gateway
参考文章https://hidekiitakura.com/2015/03/21/how-to-setup-sync-gateway-on-ubuntudigitalocean/ 在此对作者表示感谢 ...
- 在Ubuntu上安装JDK、Ant、Jmeter和Jenkins
一.前期准备 1. 在win7下载VMware.Ubuntu(用迅雷下比较快) 2. 安装完VMware后新建虚拟机,选择iso: 3. 具体配置参考如下,至此Ubantu安装完成 二.在Ubuntu ...
- Ubuntu上安装MongoDB(译)
add by zhj:直接从第四步开始就可以了,而且安装好MongoDB后会自动启动的,不必自己去执行启动命令 原文:https://docs.mongodb.com/manual/tutorial/ ...
- Ubuntu上安装ns2-2.34
Ubuntu上安装ns2-2.34 步骤1 下载ns-allinone-2.34 $ tar zxf ns-allinone-2.34.tar.gz 步骤2 sudo apt-get install ...
随机推荐
- Spring—请求映射之URL路径映射
Spring2.5引入注解式处理器支持,通过@Controller 和 @RequestMapping注解定义我们的处理器类.并且提供了一组强大的注解:需要通过处理器映射DefaultAnnotati ...
- window.applicationCache事件,介绍
1.关于applicationCache对象 在IE和Google中 为ApplicationCache对象 而在FF中为 OfflineResourceList对象 通过ApplicationCac ...
- 64位Window操作系统下,Orcal数据访问服务器端和客户端版本对应与通讯问题
最近做一个小系统,需要在客户现场搭建数据库环境.之前我们一直访问的是公司的一个测试库,现在需要在现场开发,现场的Orcal服务器是12C ,我们本不打算重装服务器端orcal,故将我们自己电脑的orc ...
- ADO.NET复习——自己编写SqlHelper类
今天复习了一次ADO.NET基础,整理一下自己的认为的重点: 编写SqlHelper类,方便我们执行数据库语句,这时可以直接调用封装在SqlHelper类的方法.现在大多数公司面试的时候,给你的面试题 ...
- 33.Spring整合Struts2.md
[toc] 1.搭建环境 在idea下可以在创建module时候选择,注意WEB-INF下的classes和lib两个目录需要手动创建,并且对应的配置文件和依赖的lib需要手动拷贝到这两个文件夹下 2 ...
- 【转】C++之内部类(嵌套类)与外部类及友元
[转]http://baike.baidu.com/link?url=Md223wQoT5s-3cZ5xRnj1pGmvm310DKAuh-HDrcEdc2l24rwobHrdEc_Mi4Z3BGP0 ...
- 你好,C++(12)如何管理多个类型相同性质相同的数据?3.6 数组
3.6 数组 学过前面的基本数据类型之后,我们现在可以定义单个变量来表示单个的数据.例如,我们可以用int类型定义变量来表示公交车的216路:可以用float类型定义变量来表示西红柿3.5元一斤.但 ...
- C语言零移位操作
给定一个整形数组要求把其中的零元素移动到数组的末尾 非零元顺序保持不变 以下采用两种方法实现 #include <stdlib.h> #include <stdio.h> #i ...
- bootstrap瀑布流代码
<extend name="Base/common" /> <block name="search-cate"> <include ...
- Callback函数详解(我感觉,回掉函数的本质是函数指针,在业务做循环处理的时候,调用一下通知外部)
2010年的最后一天了,转载一篇自己认为还不错的文章与大家分享.希望对大家有所帮助. 一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度 ...