前言
我受够小米的USB2.0了,几百年了,一直是USB2.0的type-c,传电影到手机那叫一个慢,简直想把给type-c用USB2.0的厂家批判一番,咳咳。
为此,我想到了用WIFI传文件,USB2.0的极限速度大概是480Mbps,也就是60MB/s,因此只要不是太老的手机,即使是最基本的433Mbps 5G WIFI,也能几乎媲美USB2.0的速度,更何况还是无线的呢。
我试过许多无线传输的软件,速度都不是很理想,基本都是FTP协议,在路由器旁最快也就70MB/s(CX文件管理器),这速度虽然也已经非常不错了,但他的传输有不方便的地方,比如传输带有奇怪日文(里X)的文件,会直接传输失败。
于是我想到了比较稳定好用的Samba,也就是Windows上的网络共享,这个协议即是在万兆网络下也能跑满速度。
正文
成品的Samba安卓服务端好用的目前我就找到一个,名叫LAN drive,可以从谷歌商店上下载,但默认限制速度且有广告。
身为白嫖怪,那自然是找破解版,不想花钱,那就折腾,于是我盯上了Termux。
Termux
警告:本次操作可能有丁点复杂,且需要root,不想折腾的请下载CX文件管理器或跳到最后看一键脚本。为了避免误操作,对命令稍微做了下解释。不要乱打命令,会出事的!!!!
Termux简单来说就是终端模拟器,但不同于一般的终端模拟器,他可以安装软件包,使用体验十分相似linux终端,一定程度上也确实可以代替linux终端使用。
下载链接:https://f-droid.org/repo/com.termux_106.apk
下载安装后,打开大概是这个样子

1.首先,复制粘贴以下后回车
termux-setup-storage
这步是为了获取读写手机存储的权限。
2.复制粘贴以下后回车
cat > $PREFIX/etc/apt/sources.list << \EOF
deb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24/ stable main
EOF
cat > $PREFIX/etc/apt/sources.list.d/game.list << \EOF
deb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable
EOF
cat > $PREFIX/etc/apt/sources.list.d/science.list << \EOF
deb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science stable
EOF
cat > $PREFIX/etc/apt/sources.list.d/unstable.list << \EOF
deb https://mirrors.tuna.tsinghua.edu.cn/termux/unstable-packages unstable main
EOF
这一步是为了修改Termux的软件源,所谓软件源大概就是下载软件的地方,大陆地区访问官方的软件源十分慢,这里修改成了清华大学的软件源。如果之后的下载安装还是很慢,可以将mirrors.tuna.tsinghua.edu.cn替换成mirrors.ustc.edu.cn,这是中国科学技术大学的源。
/是linux终端下,目录与目录的分隔符,如/etc/apt/的意思就是在etc目录里面的apt目录。
$PREFIX(大写)是一个变量,我称之为可以变动的值,而这个变量的值在Termux一般是/data/data/com.termux/files/usr。
cat是获取文件内容的软件。
>是重定向符号,意思是把前面获取的内容覆盖掉后面的文件。
<<也是重定向符号,意思是将后面获取的内容传递给前面的命令,即cat。
\是转义符号,意思是把后面所有符号的特殊用途无效化。
EOF本身不是命令,可以替换成其他单词,意思是在接下来的内容里,只要遇到EOF就停止记录内容,EOF本身不会被记录到内容里。
那么,这里的完整表述就是,cat将从EOF之后获取的内容输入覆盖掉/data/data/com.termux/files/usr/etc/apt/sources.list等文件的内容。
3.复制粘贴以下后回车
apt update && apt -y upgrade
这一步是在升级已经安装的软件包。
apt是一个软件,apt update的意思是刷新软件源信息,update本身就有更新信息的意思,像是你手机qq手动下滑刷新最新的聊天信息。
&&在这里的意思是前面的命令成功之后就继续下一个命令,否则不进行下一步。
apt -y upgrade,-y是一个参数,告诉apt之后所有的操作都不再询问,而upgrade自然就是升级的意思。
4.复制粘贴以下后回车
apt -y install tsu samba

可能会卡在这里,请直接回车,这里的意思大概是下载的软件包里附带的配置文件和本地的不同,是否换成下载的。因为上面修改了软件源,被覆盖就会导致修改失效。
install就是安装的意思,这里正式安装了samba软件包及其依赖。
软件包,顾名思义,一堆软件打包在一起,里面可能有好几个软件及软件的配置文件。
依赖,即你依靠我,我依靠你的意思,有些软件在运行时可能会调用到别的软件,缺失了就会无法运行。
5.复制粘贴以下后回车
mkdir $PREFIX/etc/samba/
mkdir,我自己称作make directory,意思是创建文件夹
6.复制粘贴以下后回车
cat > $PREFIX/etc/samba/smb.conf << \EOF
[global]
workgroup = WORKGROUP
security = user
passdb backend = tdbsam
smb ports = 4445
[storage]
path = /data/data/com.termux/files/home/storage/shared
writable = yes
EOF
这步是在创建samba服务的配置文件,我从centos8默认的配置文件修改来的,尽量最简化。
[global]是samba的全局配置项,一般不用修改。
[storage]是在windows文件管理器中显示的共享文件夹名称,即storage
path =
/data/data/com.termux/files/home/storage/shared
是共享的本机文件夹,这里是安卓的内部存储位置,一般不用修改。
writable = yes是开启共享文件夹的写入权限。
7.复制粘贴以下后回车
cat > $PREFIX/bin/samba << \EOF
#!/bin/bash
case $1 in
start)
sudo iptables -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -A OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
smbd
;;
stop)
killall smbd
sudo iptables -t nat -D PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -D OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
;;
restart)
killall smbd
sudo iptables -t nat -D PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -D OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -A OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
smbd
;;
*)
echo 'Samba Service'
echo 'samba start'
echo 'samba stop'
echo 'samba restart'
esac
EOF
这步是在创建一个名为samba的脚本。
case是一个条件测试语句,意思是在以下条件下,就做某事。
$1即在终端输入samba及空格之后的第一个内容,比如samba start中的start。
in后面跟的就是某种条件。
sudo就是前面装的tsu中包含的软件之一,用来以root权限执行后面的命令。
iptables是一种防火墙设置软件,使用比较复杂,这里不详细介绍。在这里是将访问本机445端口的流量转发到本机的4445端口,-A及-D是增加(add)及删除(delete)的意思,用以在开启关闭samba后增加或删除规则。
killall smbd意思是结束掉运行中所有名为smbd的程序。
smbd即samba服务的主程序。
*)意思是没有匹配到start、stop、restart就执行以下命令 ,)的左边就是条件,*是通配符,匹配所有条件。
;;是条件与条件之间的分隔符。
echo是输出后面所跟内容到终端上的命令。
esac是case条件测试语句的结束符。
这里端口转发的原因是因为windows的文件共享默认使用445端口,不支持自定义端口,而安卓默认用户不能使用1024以下的端口,需要root之后才能使用,由于未知原因,smbd在我这不能以445端口启动,只好以4445端口启动,再将访问445端口的流量转发到本机的4445端口。
8.复制粘贴修改以下后回车
pdbedit -a -u 你要使用的共享用户名
pdbedit是samba的用户管理工具,-a是增加(add)用户的意思,-u后面跟要使用的用户名(user)。
9.选择性复制粘贴以下后回车
开启共享
samba start
关闭共享
samba stop
重启共享
samba restart
如果不知道手机的ip地址呢,可以输入以下后回车
ip addr|grep wlan|grep inet|awk '{print $2}'|sed 's@/24@@'
10.在windows文件管理其中输入\\及上面获得的ip,比如我的就是\\192.168.1.11

11.如果想打开Termux就启动samba,可以输入以下回车
echo 'samba start' >> .bashrc
>>是重定向符号,意思是将前面echo输出的的内容追加到后面文件的末尾。
测速
手机:红米K30 PRO,miui 12.2.2(安卓11),WIFI 6,5G,1200M无线
路由器:华为AX3 PRO
电脑:1000M有线
电脑到手机

手机到电脑

一键脚本
其实就是把前面的一串操作按顺序执行罢了,还是希望大家能完整看一遍文章,避免遇到什么不懂的操作。
1.复制粘贴以下内容并回车
cat > samba-install.sh << \NEEEMOOO
#!/bin/bash
termux-setup-storage
cat > $PREFIX/etc/apt/sources.list << \EOF
deb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24/ stable main
EOF
cat > $PREFIX/etc/apt/sources.list.d/game.list << \EOF
deb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable
EOF
cat > $PREFIX/etc/apt/sources.list.d/science.list << \EOF
deb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science stable
EOF
cat > $PREFIX/etc/apt/sources.list.d/unstable.list << \EOF
deb https://mirrors.tuna.tsinghua.edu.cn/termux/unstable-packages unstable main
EOF
apt update && apt -y upgrade
apt -y install tsu samba
mkdir $PREFIX/etc/samba/
cat > $PREFIX/etc/samba/smb.conf << \EOF
[global]
workgroup = WORKGROUP
security = user
passdb backend = tdbsam
smb ports = 4445
[storage]
path = /data/data/com.termux/files/home/storage/shared
writable = yes
EOF
cat > $PREFIX/bin/samba << \EOF
#!/bin/bash
case $1 in
start)
sudo iptables -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -A OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
smbd
;;
stop)
killall smbd
sudo iptables -t nat -D PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -D OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
;;
restart)
killall smbd
sudo iptables -t nat -D PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -D OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-port 4445
sudo iptables -t nat -A OUTPUT -p tcp --dport 445 -j REDIRECT --to-port 4445
smbd
;;
*)
echo 'Samba Service'
echo 'samba start'
echo 'samba stop'
echo 'samba restart'
esac
EOF
chmod 755 $PREFIX/bin/samba
read -p '输入你想用的网络共享用户名:' USERNAME
read -p '输入你想用的网络共享密码:' PASSWORD
echo -e "$PASSWORD\n$PASSWORD\n" | pdbedit -t -a -u $USERNAME
echo '输入samba start启动网络共享'
echo '输入samba stop关闭网络共享'
echo '输入samba restart重新启动网络共享'
echo "你的网络共享用户名是$USERNAME"
echo "你的网络共享密码是$PASSWORD"
echo "你的ip地址是$(ip addr|grep wlan|grep inet|awk '{print $2}'|sed 's@/24@@')"
echo "在Windows文件管理器地址栏输入\\\\$(ip addr|grep wlan|grep inet|awk '{print $2}'|sed 's@/24@@')\\来访问本机文件"
NEEEMOOO
2.输入以下并回车
bash samba-install.sh

卡在这里就直接回车

按提示输入用户名及密码

脚本提示
如果想打开Termux就启动samba,可以输入以下回车
echo 'samba start' >> .bashrc
总结
这番操作可能不适合所有品牌的所有手机,我仅测试了安卓10及安卓11的K30 PRO都能使用,如果有问题我尽量回复,但菜鸡能力有限〒▽〒。
是真的挺折腾的,但也很有意思,随着WIFI越来越快,超过USB3的速度也不是梦。
当然还是希望miui官方能加上这种局域网传输,我看华为都有了,国产系统之光怎么能落后于EMUI呢,更何况华为有USB3的手机,小米没有o(╥﹏╥)o。