迅雷一直没有出linux版,wine不想去弄。linux下虽然也有各种bt软件,无奈我试用后却发现速度远比不上迅雷,甚至有些资源根本找不到。而有些迅雷的专用链接,更是没法下(原谅我2M的小水管,却喜欢看美剧)。随着各种电视盒子、智能路由的出现,迅雷弄了一个远程下载,即xware。远程下载其实就是在电视盒子、路由器上架一个极简的迅雷核心,然后通过迅雷提供的网页端来控制,实现下载。由于电视盒子多半是android系统,智能路由也是android或linux核心,所以迅雷要想支持各种设备,就必须提供各种版本的xware,其中就有一个glibc 32bit版本。这个版本即可支持在大部分linux系统(32或64位)运行。
要运行xware,有几个条件:
- 下载好xware
- 运行xware
- 绑定xware
- 挂载一个存储设备
xware可以到迅雷的论坛去下载(http://luyou.xunlei.com/forum.php?mod=forumdisplay&fid=51&filter=typeid&typeid=1),在产品发布里,下载最新的glibc_32版本即可。如Xware1.0.31_x86_32_glibc.zip。下载好后解压到一下目录中,如Xware1.0.31。里面的文件如下:
[email protected]:~/Xware1.0.31$ ls -lh
总用量 4.2M
-rwxrwxr-x 1 xzc xzc 4.1M 8月 27 2014 EmbedThunderManager
-rwxrwxr-x 1 xzc xzc 24K 8月 27 2014 ETMDaemon
-rwxrwxr-x 1 xzc xzc 111K 8月 27 2014 portal
-rwxrwxr-x 1 xzc xzc 23K 8月 27 2014 vod_httpserver
运行xware很简单,进入当前目录,运行./portal即可。运行出输出如下:
[email protected]:~/Xware1.0.31$ ./portal
initing...
try stopping xunlei service first...
killall: ETMDaemon: no process killed
killall: EmbedThunderManager: no process killed
killall: vod_httpserver: no process killed
setting xunlei runtime env...
port: 9000 is usable.
YOUR CONTROL PORT IS: 9000
starting xunlei service...
etm path: /home/xzc/Xware1.0.31
execv: /home/xzc/Xware1.0.31/lib/ETMDaemon.
getting xunlei service info...
Connecting to 127.0.0.1:9000 (127.0.0.1:9000)
the active key is not valid.
try again...(has tried 1 time(s)).
getting xunlei service info...
Connecting to 127.0.0.1:9000 (127.0.0.1:9000)
THE ACTIVE CODE IS: xxxbbb
go to http://yuancheng.xunlei.com, bind your device with the active code.
finished.
运行时需要根据你的网络情况而定,有时try again...N多次才能连上迅雷的服务器,也有过连不上的。连不上再重新运行一次就好。
接着需要绑定你的设备到网页版迅雷远程控制。登录http://yuancheng.xunlei.com(没帐号就注册一个),然后将上面运行得到的一个code(THE ACTIVE CODE IS: xxxbbb),这里是xxxbbb。输入这个code,你刚刚运行的迅雷就与远程下载绑定了。
然后,就是熟悉的迅雷界面了
现在,迅雷基本算是跑起来了。但是还有一个问题,下载的文件存在哪里呢。远程下载只是一个网页客户端,它没有办法知道你电脑上硬盘的情况。它只能通过与运行在电脑上的迅雷通讯才能了解电脑上有多少空间,有哪些盘。可是迅雷开发xware的初衷并不是给电脑用的,而是给各种盒子、路由使用的。这些设备几乎是没有硬盘或者只有固定很小的空间,没有办法用来下载的。但它们都是linux核心,同时很多设备也提供了USB接口把U盘、移动硬盘接入。这些设备几乎都会挂载到/media目录下。所以xware只会检测挂载到/media目录下可写的设备。比如我把我的U盘插到电脑上,点击远程下载中的新建,即可看到迅雷已经检测到我的U盘,并在里面自动创建了一些必要的文件夹。
[email protected]:~$ df
文件系统 1K-blocks 已用 可用 已用% 挂载点
/dev/sda6 24475012 5982676 17226008 26% /
none 4 0 4 0% /sys/fs/cgroup
udev 3760900 4 3760896 1% /dev
tmpfs 754340 1324 753016 1% /run
none 5120 0 5120 0% /run/lock
none 3771696 652 3771044 1% /run/shm
none 102400 64 102336 1% /run/user
/dev/sda7 26866740 5797352 19681564 23% /home
/dev/sda1 307032 37920 269112 13% /boot/efi
/dev/sdb1 7135728 4606340 2529388 65% /media/xzc/APACER
[email protected]:~$ ls /media/xzc/APACER -lh
总用量 48K
drwx------ 2 xzc xzc 4.0K 12月 13 22:18 GHO
drwx------ 3 xzc xzc 4.0K 3月 13 23:22 system_tools
drwx------ 2 xzc xzc 4.0K 4月 15 20:57 TDDOWNLOAD
drwx------ 2 xzc xzc 4.0K 4月 15 20:57 ThunderDB
电脑上使用迅雷肯定希望直接下载到硬盘上啊。那么我们可以使用mount --bind来将一个文件夹挂载到/media下,这样迅雷就可以下载了。对,没错,一切都OK。可是又有一个问题,假如我正在下载,突然要用到U盘。接到电脑上,迅雷二话不说,直接在U盘上创建两个文件夹,这让我情何以堪。要让迅雷忽略我的U盘,没有别的办法,只有取消迅雷在U盘上的写权限。但是U盘我还要往里面拷东西啊。所以我们只好给迅雷创建一个用户,然后用这个用户运行迅雷。这样,迅雷在我的U盘上就没有写权限了。
先创建一个叫thunder的用户
sudo useradd --no-create-home --user-group thunder
然后把xware的目录改为thunder所有,这样thunder才有权限运行xware(直接通过sudo给权限也行)
su chown thunder:thunder -R Xware1.0.31
再创建一个用来挂载的目录和一个下载的目录,这些目录也归thunder所有,不然它没权限写,怎么行。而这个下载目录你当前的用户也是有权限读的,不然下载的东西你没法看,有什么用?
sudo mkdir /home/xzc/TDDOWNLOAD -p sudo mkdir /media/thunder/TDDOWNLOADS -p sudo chown thunder:thunder /home/xzc/TDDOWNLOAD sudo chown thunder:thunder /media/thunder/TDDOWNLOADS
然后我们把下载目录挂载到另一个目录
sudo mount --bind /home/xzc/TDDOWNLOAD /media/thunder/TDDOWNLOADS/
再重新以thunder用户运行迅雷(先获取root权限,再转换到thunder用户可以免去输入thunder的密码,因为刚刚就没给thunder创建密码,输入什么都不对的)
sudo su thunder -c ./portal
这样,迅雷会检测到/media/thunder/TDDOWNLOADS目录,下载的东西却是放到/home/xzc/TDDOWNLOAD中去了。现在,如果你点“新建”任务,可以看到剩余空间,则说明挂载成功。
折腾到此,总算是可以下载了,不过既然是在linux下,怎么也得写个脚本吧
#!/bin/sh XWARE_DIR=./Xware1.0.31 USERNAME="thunder" DOWN_DIR=/home/xzc/TDDOWNLOAD MOUNT_DIR=/media/thunder/TDDOWNLOADS if [ $# -gt 0 ]; then #加参数 -s是关闭 su $USERNAME -c "$XWARE_DIR/portal -s" code=$? if [ $code -eq 0 ]; then umount $MOUNT_DIR echo "xware stop sucess..." else echo "xware stop fail,code $code" fi else #不加参数默认是启动 su $USERNAME -c $XWARE_DIR/portal code=$? if [ $code -eq 0 ]; then mount --bind $DOWN_DIR $MOUNT_DIR echo "xware start sucess..." else echo "xware start fail,code $code" fi fi
这样,把这个文件放到Xware1.0.31的上一层,名为xware.sh。这个脚本会自动挂载文件夹,或者取消挂载,需要root权限。
运行 sudo ./xware.sh
关闭 sudo ./xware.sh -s