# you-get-gui **Repository Path**: guanzs/you-get-gui ## Basic Information - **Project Name**: you-get-gui - **Description**: you-get 强大的媒体下载程序的图形前端软件。 - **Primary Language**: C++ - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-05-26 - **Last Updated**: 2024-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 这是一款采用 Gtkdialog 来编写的 you-get 媒体下载程序的图形前端。 本程序在 GPL v2 的条款下分发。 本程序只是简单的将 you-get 的命令选项以图形化的方式加以封装,最终的执行仍在终端。这种奇怪的工作方式可能会出现一些小问题,所以,使用前建议认真阅读本文档。 # 安装依赖 ## 安装 Gtkdialog 本程序由 Gtkdialog 提供图形交互,需要安装 gtkdialog 0.8.3 或更高版本。这里仅以 Debian/Ubuntu 为例介绍其安装过程,其它的发行本可以从官方库中安装(比如 Fedora),或者从 AUR 构建(Arch Linux/Manjaro)。 第一步:安装 C 编译环境和构建工具: ```bash sudo apt install git build-essential sudo apt install texinfo autoconf automake flex bison ``` 第二步:安装编译 Gtkdialog 所需的依赖: ```bash sudo apt install libc6 libgdk-pixbuf2.0-0 libglade2-0 libglib2.0-0 libgtk2.0-0 sudo apt install libgtk2.0-dev glade libglade2-dev libvte9 libvte-dev ``` **注意:本程序需要 Gtkdialog 的终端组件来完成命令操作**(主要用来接收指令并执行,不必输入),**所以 VTE 是必须安装的。** 在 Debian/Ubuntu 上不知道是由 libvte9 包还是 libvte-dev 包提供,你反正把两个包都安装就是了。如果你之前编译 Gtkdialog 时没有安装 VTE 而导致无法使用终端组件(在构建 Gtkdialog 时, VTE 不是必要依赖,所以也会成功编译),则可以在安装 VTE 之后,再重新编译。 第三步:获取 Gtkdialog 的源码并编译安装: Gtkdialog 的源码可以从这里 获取。 或者从 git 获取最新版本(始终稳定): ```bash git clone https://github.com/puppylinux-woof-CE/gtkdialog.git cd gtkdialog ./autogen.sh make sudo make install ``` 要卸载 gtkdialog ,可以在上述的 gtkdialog 目录下执行: ```bash sudo make uninstall ``` ## 安装 you-get 本程序的核心下载功能由 you-get 提供,下面介绍其安装方法(还是以 Debian/Ubuntu 为例)。 首先安装 pip3 : ```bash sudo apt install python3-pip ``` 其次,如果你想把 you-get 安装到系统位置,则可以执行: ```bash sudo pip3 install you-get ``` 如果你想把 you-get 安装到用户位置,则可以执行: ```bash pip3 install you-get --user ``` 上述命令会把 you-get 的可执行文件安装到 ~/.local/bin 目录,这需要保证你的 ~/.local/bin 目录已经加入了 $PATH 环境变量,否则它将无法运行。 ## 其它依赖 以下这些依赖包可以从你的发行本的软件仓库中安装: * mpv :这个主要用来播放网页视频,它不是必须的,可以不安装。 * wmctrl :在与浏览器进行交互时,该程序用于快速切换并激活主程序窗口。 * xdotool:用于辅助窗口操作。 * xwininfo:用于获得窗口的位置和大小等信息。 * axel:对于某些下载比较慢的站点可以使用它来加速。当然,你也可以使用 aria2 来加速,只需修改一下 bin/downloader.sh 脚本中的 -a 参数部分就行。 ```bash sudo apt install mpv wmctrl xdotool xwininfo axel ``` # 运行程序 ## 第一次运行 本程序不需要手动安装,安装完以上依赖之后,第一次(双击)运行项目目录下的 AppRun 文件时,会打开如下对话框: ![](res/install-dialog.png) 点击『是』按钮将会自动创建启动器,下次你可以从应用程序菜单中启动本程序,而不再需要从项目目录中打开应用。 程序的主界面: ![](res/AppRun-Result.png) ## 一点小问题 **问:运行之后,图标颜色和终端外观与 GTK 主题不搭配怎么办?** 默认的图标颜色较暗,如果你的 GTK 采用了暗黑主题会有些不搭配。不过,可以通过『菜单』 —› 『设置』,打开设置窗口进行调整。终端外观也可以在这里配置。 ![](res/settings-window.png) **问:可以在程序自带的终端上执行其它命令吗?** 可以,但不建议你这么做。如果在终端上执行 exit 命令,就会导致当前 shell 退出,从而无法接收从窗口按钮发出的下载指令和其它便捷指令,只能通过重启主程序来解决。 **问:有的时候,为什么明明没有下载任务,却总弹出 『当前有下载任务正在进行,不能执行该命令』的对话框?** 出现这种情况有可能是 you-get 程序已经被卡住,不能自行退出。这时,可以切换到程序自带的终端,然后按下 Ctrl + C 或者 Ctrl + \\ 组合键强行中止任务。 **问:如何重装和卸载?** 如果你改变了项目的路径,或安装新的版本,则需要先执行一下 bin/uninstall.sh 脚本;或者手动删除 ~/.local/share/applications/You-Get-GUI.desktop 文件,再运行 AppRun 。只有这样,才能重新创建指向新路径或新版本的桌面配置文件。当需要卸载时,执行 bin/uninstall.sh 之后,手动删除项目目录即可。 **问:我可以将它打包吗,比如安装到 /opt 目录等** 不能,除非你能自己修改一下脚本。如前面所述的图标修改,还有窗口设置、部分参数选项的修改等等,相关数据的读写都是在项目目录下进行的,需要保持当前用户拥有该目录的可写权限。如果将项目目录移动到只有 root 用户才有可写权限的目录,比如 /opt 等,就会导致相关数据的改写失败。 # 与浏览器的交互 本程序与浏览器的交互主要通过以下扩展来完成。 ## 火狐 Open With 扩展 [Open With](https://addons.mozilla.org/zh-CN/firefox/addon/open-with/) 扩展可以在火狐浏览器的右键菜单中,通过创建子菜单项来与外部程序进行交互。通过该扩展可以将网页的链接转递给外部程序作为参数。 下载和安装扩展: 该扩展依赖 python2.7 ,一些版本较高的系统可能已经移除了 python2.7 ,但也很容易安装回来。 ```bash sudo apt install python2 ``` 安装之后,点击扩展的『Open With 选项.....』进入设置页面。 ![](res/open-with-page.png) 首先完成上面方框里提示的操作: 1. 点击『点选这里来下载』链接下载一个 open_with_linux.py 文件; 2. 将文件复制到比如 ~/.local 目录(目录可以随便选,但注意,**如果这个文件被删除或移动,就会造成 Open With 扩展无法正常工作**); 3. 切换到上述目录,并给予 open_with_linux.py 可执行权限:`chmod u+x open_with_linux.py` 4. 执行 `./open_with_linux.py install` 完成安装。 5. 如果你删除或移动了文件,则必须再次执行上面的步骤。 接下来我们开始创建子菜单项。继上图,首先将底下 『Show in context menus of:』栏中的所有选项全部勾选,然后点击中间的『新增浏览器』按钮,弹出如下对话框: ![](res/new-browser.png) **名称:** 可以随便写个名称,比如『将链接发送到 You-Get GUI』。 **指令:** 填写 AppRun 文件的绝对路径,你把项目目录放在哪里,就写哪里。另外,把参数 `%s` 也给它加上,比如我这里填写 `/home/ali/MyScript/You-Get-GUI/AppRun %s` 。 **图标:** 如果上面没有你满意的图标,可以点击 『自定义图标』查找并添加。 **新增:** 点选你想要的图标之后,点击『新增』按钮完成创建子菜单项。 建立子菜单项之后,如下图,右键点击视频的播放链接,就可以在交互菜单上看到我们添加的程序了。 ![](res/page-link.png) ## External Application Launcher External Application Launcher (外部应用程序启动器)扩展和上面的 Open With 一样,能够定义一个工具栏按钮或多个上下文菜单项,以直接从浏览器执行外部可执行文件。它从当前网页中提取参数并将它们作为你选择的命令行参数传递给外部应用程序。 该扩展支持以下浏览器: | 浏览器 | 地址 | | :------- | :------------------------------------------------- | | Chrome | | | Chromium | | | Vivaldi | | | Brave | | | Edge | | | Firefox | | | Waterfox | | | Tor | | 火狐系的浏览器(Firefox、Waterfox)可以从这里下载: Chromium 系的浏览器(Chrome、Chromium、Vivaldi、Brave、Edge),因国内无法询问谷歌商店,只能从 进行搜索,该扩展的快速询问地址为 安装扩展之后,我们还需要从 下载一个 zip 包。 选择对应的系统压缩包进行下载,并解压。然后运行 `install.sh` 文件进行安装。至此,External Application Launcher 扩展算是安装完毕。 点击该扩展可以进入设置页面。External Application Launcher 不支持中文,有点麻烦。这里就一些设置选项进行简单的说明: **Display Name(显示名称):** 定义子菜单项的名称。 **Executable Name(可执行文件名称):** 如果程序在 PATH 环境变量所指定的目录下,可以不必填写绝对路径。 **Arguments(参数):** 一般选第一项就行,也就是 `[HREF]` 。 **Pre JavaScript:** 如果你明白它是干什么的话可以填写,一般略过就行。 **Post JavaScript:** 略过 **Placement:** 定义子菜单项激活的地方,有几个选项我觉得是必选的: * Page Context(页面上下文):右击页面时弹出的菜单中出现该子项 * Selection Context(选择上下文):鼠标选定文本后右击时弹出的菜单中出现该子项 * Link Context(链接上下文):在链接上右击时弹出的菜单中出现该子项 * Tab Context(标签卡上下文):这个只对火狐浏览器有效,在标签标题栏上右击时弹出的菜单中出现该子项 其它的选项,比如 Image Context(图像上下文)、Video Context(视频上下文)、Audio Context(音频上下文)等,可以根据自己的需要来决定是否勾选。 **Icon (32x32):** 图标选了之后,如果有多个子项时,不会显示,所以可以略过。 **Ignore Errors(忽略错误):** 应用程序出现错误时,不向用户发通知 **Quotation(引用):** 向外部程序转递参数时,加上引号 **Close Tab(关闭标签卡):** 执行外部程序将关闭源标签卡 **Window(窗口):** 关闭外部程序时,更改浏览器窗口的状态。有几个选项:do not alter(不做任何改变)、normal(正常)、minimized(最小化)、maximized(最大化)、fullscreen(全屏)。建议选『do not alter』。 几个按钮的含义是: * Import Settings(导入设置),这会将覆盖当前所有设置 * Export Settings(导出设置),将当前的所有设置导出 * Support Development(支持作者),要钱的 * Open FAQs page,打开常见问题解答页面 * Test Arguments Validity(测试参数有效性) * Clear Blocked List(清除阻止列表) **List of applications(应用程序列表):** 选择 `- new -` 可以新建子项,建好后点击 『Add application』(添加应用)按钮可以保存。如果选择已有的子项,该按钮是『Update application』(更新应用)。点 『Remove』可以删除已有的子项。 后面的略过。 # Axel 的简单配置 有时候下载较慢时,调用 axel 来加速也是一个很好的选择,特别是国外的一些视频网站。然而,通过 you-get 来调用 axel ,通常是不能给 axel 加参数的。例如,你不能采用如下命令形式来给 axel 指定最大连接数: ```bash you-get https://tv.naver.com/v/32708759 -p axel -n 8 ``` 因此,这需要我们手动配置 axel 的初始化文件(一般存放在 ~/.axelrc 或者 /etc/axelrc )。下面是 axel 的一个配置文件的内容,你可以保存到 ~/.axelrc 文件中: ``` # Axel - 一个轻下载加速器的配置文件 # 参见 https://github.com/axel-download-accelerator/axel/blob/master/doc/axelrc.example # 以下这些选项如果不想设置(采用程序默认),可以将它注释。 # 设置 Axel 将尝试建立的最大连接数。程序中一般也会有一个预编译的最大值(可能是 16 ), # 如果设置超出这个值,则需要重新编译安装 Axel ,方可有效。 # 在默认情况下,设置为 4 已经足够了。 num_connections = 8 # 设置一个最大的速度(字节/秒),Axel 将尝试加速 ±5% (其实就是限速,默认下载速度无上限)。 # 设置时要注意单位换算,假如,当需要设置最大速率为 20 MB/s 时,计算的结果是 echo $((20*1024**2)) 。 # max_speed = 20971520 # 设置需要多少秒之后才尝试与服务器重新建立连接。 # reconnect_delay = 20 # 设置 Axel 的最大重定向次数。默认值是 20 。 # max_redirect = 20 # 设置在指定的秒数内,如果没有接收到来自服务器的数据,则中止(和恢复)连接。 # connection_timeout = 45 # 在 IPv4 和 IPv6 中选择要使用的 IP 协议。注意,如果选择了一个协议,Axel 就不会尝试与另一个协议进行连接。 # 可选的值有 ipv4 或 ipv6 。默认情况下,Axel 会根据 resolv 库返回的地址来使用 IP 协议。 # use_protocol= ipv4 # no_proxy 是一个用逗号分隔的本地域名列表,axel 不会对它们使用任何代理。 # 你不需要在这里指定完整的主机名。 # no_proxy = # 注意: 如果 HTTP_PROXY 环境变量已经被正确设置,你就不必在这里再次设置。 # 这个设置应该与 HTTP_PROXY 变量的格式相同,比如 "http://host.domain.com:8080/", # 当然像 "host.domain.com:8080" 这样的字符串也是可以的。 # 有时候 HTTP 代理也支持 FTP 下载,所以你在这里配置的代理也会被用于 FTP 下载。 # http_proxy = # 在本地文件名中保留 CGI 参数?设置为 0 时,将不保留 CGI 参数。一般采用默认设置即可。 # strip_cgi_parameters = 1 # 下载一个 HTTP 目录/索引页时,(例如http://localhost/~me/)我们需要将其存储在哪个本地文件名中? # default_filename = default # 每隔几秒保存一次状态。将此处设置为 0 ,可以在下载过程中禁止保存状态。 # 当程序终止时,状态文件将始终被保存(当然,除非下载任务已经完成), # 所以,该选项只对保护自己免受突然的系统崩溃时有用。 # save_state_interval = 10 # 设置缓冲区大小 -- 从连接中读取的最大字节数。 # 缓冲区用于所有连接(每个连接没有单独的缓冲区)。 # 较小的缓冲区可能会提高限速器的精度,但较大的缓冲区是快速连接的更好选择。 # buffer_size = 5120 # 默认情况下,Axel 会打印一些关于下载的状态信息。你也可以通过将这一项设置为 0 来禁用它。 # verbose = 1 # FTP 搜索器 # search_timeout - 等待速度测试的最长时间(秒) # search_threads - 一次进行速度测试的最大数量 # search_amount - 要从 filesearching.com 请求的 UR L的数量 # search_top - 用于下载的不同 URL 的数量 # # search_timeout = 10 # search_threads = 3 # search_amount = 15 # search_top = 3 # 如果你有多个互联网接口,你可以在此处列出它们(接口名称或 IP 地址),让 Axel 使用所有的接口。 # 如果其中一个接口比其他接口快,你可以多列出一次,它就会被更经常地使用。 # # 默认情况下,此选项为空,这意味着 Axel 使用路由表中的第一个匹配项。 # interfaces = # 在旧的版本中,下载时,默认会以滚动的方式打印进度信息。如果你不喜欢这种界面,可以把此处设置为 1 ,就会得到一个类似 scp 的界面。 alternate_output = 1 # 将此处设置为 1 ,可以避免 Axel 在当前文件夹中已经存在同名文件且未找到状态文件时下载文件。 # 通常情况下,如果已经存在同名文件,Axel 就会在新下载文件的名称中加上 .<数字> 后缀。 # 如果使用 no_clobber 选项,Axel 就会完全跳过下载这个文件。 # no_clobber = 1 # 这个选项不知道是否有效。如果有效,通过设置一个用户代理,伪装成浏览器, # 就有可能达到欺骗服务器的目的,以避免激活对方的反爬虫机制。当然,也不一定有用。 # user_agent = Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.7113.93 Safari/537.36 ``` **附录:Axel 的操作选项参数**: ``` 用法: axel [选项] 地址 1 [地址 2] [地址…] --max-speed=x -s x 指定最大速率(字节/秒) --num-connections=x -n x 指定最大连接数 --max-redirect=x 指定最大重定向次数 --output=f -o f 指定本地输出文件 --search[=n] -S [n] 搜索镜像并从 n 个服务器下载 --ipv4 -4 使用 IPv4 协议 --ipv6 -6 使用 IPv6 协议 --header=x -H x 添加报头字符串 --user-agent=x -U x 设置用户代理 --no-proxy -N 不使用任何代理服务器 --insecure -k 不校验 SSL 证书 --no-clobber -c 跳过已下载文件 --quiet -q 使用输出简单信息模式 --verbose -v 更多状态信息 --alternate -a 另一种进度指示器 --percentage -p 打印简单百分比而不是进度条(0-100) --help -h 帮助信息 --timeout=x -T x 设置 I/O 和连接的超时时长 --version -V 版本信息 ``` # 本次更新了什么 本次更新对以下内容做了修改: * 删除了一些多余的代码,窗口外观设置只留下图标颜色,和窗口透明度两项。 * 删除了启动画面。 * 将终端的初始工作目录设置为 /dev/shm ,不再提供修改设置选项。 * 终端的默认 shell 为 bash ,不再提供修改设置选项。 * 增加了一个小功能,可以自动记录主窗口退出时的位置和大小的,下次将以此位置和大小来启动程序。(需要 xdotool 和 xwininfo 来支持) * 增加了『调用 axel』按钮,可以调用 axel 来加速下载。(仅适合某些下载比较慢的站点,该功能不是十分完善,如果不是下载太慢的话,最好不要使用) 如果你之前安装过旧的版本,则请在运行 AppRun 之前,先执行一下 bin/uninstall.sh ;或者手动删除 ~/.local/share/applications/You-Get-GUI.desktop 文件。