V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zictos
V2EX  ›  Android

有用安卓 termux 的吗?感觉问题好多

  •  1
     
  •   zictos · 2021-01-02 20:27:23 +08:00 · 13577 次点击
    这是一个创建于 1426 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1 、root 搞不定,明明手机 root 了,但安装 pkg install tsu 后提示没 root 。直接输入 su 命令可以获取 root 权限,但 termux 自带的命令基本都用不了了。

    2 、外置 sd 卡权限无法获取,据说本来就没办法获取。内置 sd 卡似乎也有很多权限问题,不知道 root 后会不会好点,有时候莫名其妙提示权限问题,chmod 也失败。其他程序就基本没见过权限问题,另一个 app“终端模拟器”就能直接获取 root 权限,另外也没见过其他权限问题。

    3 、tasker 调用方面也没试,看了下有个 termux-tasker 的 app 好像是收费的,付费后也不知道能不能成功使用。

    4 、很多问题在英文网站也有一些遇到同样的情况的,但大都不了了之。主要是想用 termux 里面的 python,感觉 python 很多包都可以直接 pip 安装,挺不错的,之前用 qpython 就很多包都用不了。

    26 条回复    2021-03-10 15:11:51 +08:00
    marczhao
        1
    marczhao  
       2021-01-02 20:54:42 +08:00 via iPhone
    1. tsu 没问题(s9,Android 10,magisk)
    2-4.没试过
    Ayahuasec
        2
    Ayahuasec  
       2021-01-02 20:59:40 +08:00   ❤️ 1
    tsu 不兼容但是可以直接用 su 的话,你重新设置一下环境变量好像所有命令就都能用了。
    如果没有开低端口的需求的话,可以不用 root,可以 termux 里按一个 proot 的 debian 或者 centos,然后在 proot 里面折腾,可以避免很多因为环境依赖所引起的问题,毕竟这样像 WSL 一样相当于一个完整的 Linux 子系统。
    Internal Storage 的话给了应用权限以后,还要在 termux 里面运行 termux-setup-storage 获取权限和设置路径,之后在~/storage/shared/目录里面访问。External Storage 好像是 root 了以后在 /storage 还是 /sdcard 里面,不过外置 sd 卡我也没试过,你可以找找看。
    zictos
        3
    zictos  
    OP
       2021-01-02 21:00:08 +08:00
    @marczhao #1 那可能系统问题,看来我得刷机升级系统后再试试
    systemcall
        4
    systemcall  
       2021-01-02 21:02:16 +08:00   ❤️ 1
    装个 tmoe,里面装个 ubuntu,连 root 都不用,电视上面都跑得了
    没什么别的需求的话,不要用内置 SD 卡。内置 SD 卡现在是虚拟出来的,本来就不太能支持权限的设置。而且性能低
    TypeError
        5
    TypeError  
       2021-01-02 21:09:19 +08:00 via Android
    调用 tasker 没任何问题,我弄了个脚本组合 YouTube-dl 和 you-get,分享链接就能下载各个网站视频
    zictos
        6
    zictos  
    OP
       2021-01-02 22:11:51 +08:00
    @Ayahuasec #2
    @systemcall #4
    不 root 的话就算装 linux 应该也操作不了系统文件,那些能操作安卓系统的命令也用不了,只能在装的 linux 的内部用。一般有哪些作用呢?感觉这样的话就像远程 linux 服务器一样。如果是在后台跑原生 linux 程序应该比较耗电吧?

    一般安卓内部 sd 卡是指的 /storage/emulated/0/, 很多程序都会把一些占空间比较大的数据保存到这里,默认就有访问权限。但 termux 好像只有专门的目录才有完全的权限,不知道为什么跟其他程序不一样。外置 sd 卡有的在 /storage/extSdcard/ 下面,这个就是额外插入的外置存储卡
    zictos
        7
    zictos  
    OP
       2021-01-02 22:13:45 +08:00
    @TypeError #5 是用“termux-tasker”让 tasker 调用的吗?应该没其他方案了吧!
    ysc3839
        8
    ysc3839  
       2021-01-03 01:34:54 +08:00 via Android
    @zictos 我建议不要用“内置 SD 卡”这个称呼,我的惯用称呼是“共享存储空间”。从 Android 6 开始,需要授权存储空间权限才能访问的。

    你说的“只有专门的目录才有完全的权限”,应该指的是应用程序的私有存储空间,这个才是无需授权即可访问的,同时也是每个应用独立隔离的。
    zictos
        9
    zictos  
    OP
       2021-01-03 02:18:39 +08:00   ❤️ 1
    ▃▃▃▃
    通过添加环境变量的办法非常好用,非常感谢 @Ayahuasec
    只要添加环境变量之后就可以完全无视 termux 了,termux 自带的一些 linux 命令(没有的命令也可以安装)以及 python 都可以直接去“终端模拟器”或者 tasker 中运行了,并且 termux 不需要后台运行。
    ▃▃▃▃
    只是安卓目前只能临时添加环境命令,每次启动终端都需要设置一下环境变量,暂时没找到永久的办法。
    目前这样操作,在根目录 /新建一个 path 的文件,输入下面的两行内容:
    export PATH=/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets:$PATH
    export LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib
    ▃▃▃▃
    以后只需要在 root 权限下在终端中输入. /path 就可以直接添加环境变量了,注意有个点以及一个空格,代表执行根目录下的 path 文件。“终端模拟器”也可以设置启动时自动执行. /path,这样只要一启动就默认添加上环境变量了,直接输入 python 之类的命令就可以运行 python 了。
    .
    .
    .
    .
    .
    ▃▃▃▃
    ①tasker 调用:添加任务,选择代码--运行外壳(勾选使用 root ),输入类似下面的代码就可以执行 python 文件:
    . /path #添加环境变量
    python test.py #运行名为 test.py 的 python 脚本

    ▃▃▃▃
    ②tasker 中不使用 py 文件的情况下直接运行多行 python 代码:添加任务,选择代码--运行外壳(勾选使用 root,可选择将输出保存到变量),在三引号内输入类似下面的代码就可以直接执行多行 python 代码:
    . /path
    python -c '''
    a=1
    b=2
    c=a+b
    print(c)
    '''
    ▃▃▃▃
    ③像上面那样直接写对于偶尔调用下比较方便,if 或复杂的循环逻辑都可以写到里面,只是比较容易出错。我刚 windows 输入后粘贴过去就报错,可能是换行符的问题,手动输入就没问题。
    zictos
        10
    zictos  
    OP
       2021-01-03 02:26:38 +08:00
    @ysc3839 #8 只是“共享存储空间”一般更难让人理解吧,除非安卓开发者才能一下子就知道什么意思。嗯,的确是需要授权,只是一般都会同意授权的,所以我才说默认能访问。的确我看了下 termux 好像默认是没有申请共享存储空间权限的,有一条命令可以设置,但设置后权限好像有时有用,有事没用,也不知道到底怎么回事。现在好了,可以完全无视 termux 了,具体见 9 楼,我提的几个问题也都完全解决了
    3dwelcome
        11
    3dwelcome  
       2021-01-03 11:46:50 +08:00 via Android
    sdcard 没权限的,这是安卓限制,不是 termux 的缺陷。
    用 termux-setup-storage 可以正常访问读写 sd 。
    root 的话,我一般用 proot,因为手机不想越狱。但好像 root 的手机用也没问题,正常访问 /data 系统目录。
    zictos
        12
    zictos  
    OP
       2021-01-03 16:19:35 +08:00
    @3dwelcome #11 你说的 sdcard 是指自己插的外置内存卡吗?这个默认没权限,但可以手动授权的,大部分 app 在没权限的时候都会提示需要手动授权,也就是会弹出系统界面,然后选择内存卡的根目录就是授权了。但是 termux 却根本不会弹出任何要求授权的提示
    codehz
        13
    codehz  
       2021-01-03 17:47:16 +08:00
    @zictos #12 termux-setup-storage 会弹框啊(不过要先装 api 那个(
    zictos
        14
    zictos  
    OP
       2021-01-03 17:50:31 +08:00
    @codehz #13 termux-setup-storage 是获取自带存储的权限,但自己插的内存卡是不会弹窗让授予权限的
    icelo
        15
    icelo  
       2021-01-03 18:55:27 +08:00
    死在了 root
    3dwelcome
        16
    3dwelcome  
       2021-01-03 20:01:26 +08:00 via Android
    我和 14 楼一样,termux 能正常读写 sdcard,也就是自己插的 tf 卡。
    可能楼主不行吧,不能说所有人都不行。
    3dwelcome
        17
    3dwelcome  
       2021-01-03 20:01:54 +08:00 via Android
    和 13 楼一样,有提示。
    zictos
        18
    zictos  
    OP
       2021-01-03 20:07:51 +08:00
    @3dwelcome #17 一般弹窗仅仅允许的话应该是允许内置 sd 卡权限,但自己插的卡是 app 弹出提示后需要到系统的资源管理器页面选中插的 tf 卡才可以的,反正我的手机所有 app 都是这样的,哪怕有 root 权限也默认不能访问自己插的卡。
    不过反正现在我无所谓了,直接无视 termux 了,具体见 9 楼
    3dwelcome
        19
    3dwelcome  
       2021-01-03 20:16:18 +08:00
    @zictos 我觉得还是你搞错了,你 google 一下 termux-setup-storage,官方是这个页面 https://wiki.termux.com/wiki/Termux-setup-storage,很明确的写着~/storage/external = external storage, 肯定不是内置 sd 卡权限。

    内置的叫 internal storage, 外置的叫 external storage,termux 支持的是后者。
    zictos
        20
    zictos  
    OP
       2021-01-03 20:35:48 +08:00
    @3dwelcome #19 那个网页的确是说会在外部存储卡创建一个文件夹,并且~/storage/external 是通过 Symlink 符号链接指向那个外部存储卡中创建的文件夹。但我的手机上实际并没创建,使用 cd ~/storage/external 提示不存在目录。

    而且不明白为什么要搞什么复杂呢?直接用完整路径访问外部存储卡岂不是更方便?言下之意是不是说就算真的在那个外部存储卡创建了一个文件夹,那也只有那个创建的文件夹才能访问,外部存储卡的其他文件夹无法访问吧?
    3dwelcome
        21
    3dwelcome  
       2021-01-03 20:42:54 +08:00
    我这里是可以顺利访问读取 TF 卡上的所有外部文件,好像正常 APP 只要获得授权后,都能访问吧,没你想的那么复杂。
    3dwelcome
        22
    3dwelcome  
       2021-01-03 20:44:37 +08:00
    我的权限问题,是 TF 卡上不能把 elf 设置成可执行权限。这点好像其他 APP 也不可以,只能单纯当个外置存储盘来读写。
    zictos
        23
    zictos  
    OP
       2021-01-03 20:53:20 +08:00
    @3dwelcome #21 正常 app 获得授权是都可以访问的,只是 termux 跟正常 app 的授权方式不一样。我不知道你的手机是怎么给正常 app 授权的,是弹出一个系统的资源管理器,然后在资源管理器中选中 tf 卡吗?我的手机都是这样的。但 termux 并没弹出系统的资源管理器,如果不用弹就能授权,那其他 app 又何必弹出呢。

    并且我前几天看到一个网页好像是说 termux 无法获取 tf 卡的权限,大致意思就是说是什么单纯命令行程序无法获取 tf 卡的权限,只有正常的界面的程序才可以获取,但“终端模拟器”也属于命令行程序,它照样可以获取 tf 卡的权限。
    3dwelcome
        24
    3dwelcome  
       2021-01-03 20:58:12 +08:00
    那可能是 termux 没完美兼容你的手机。
    我是 termux 的老用户了,android7.0 安装过,android5.0(root)安装过,android10.0 安装过,华为平板的 android9.0 也安装过,基本上没出过什么大问题,就按照官方的教程来,termux-API 都能调用。
    很早以前,termux 老版本会有一些奇怪的问题,需要手动安装一些 deb 软件。升级到新版后,这个问题就消失了。
    fox0001
        25
    fox0001  
       2021-03-04 08:41:41 +08:00 via Android
    一直都在 Lineage OS 上跑 termux,木有楼主的问题。另外,从 F-Droid 下载,termux 全家桶都是免费的
    imgbed
        26
    imgbed  
       2021-03-10 15:11:51 +08:00
    安卓有这个: https://m3w.cn/wyspxz
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2899 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:35 · PVG 19:35 · LAX 03:35 · JFK 06:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.