[{"content":" 前言 虽然树莓派4B的性能相对较强，但其网络接口的性能却并不算优秀，可作为百兆无线路由器。 使用 docker 部署 openWrt，可以在树莓派作为路由器的同时，部署其他服务。注意：该方案折腾大于使用，使用 docker 多合一可能会导致无线软路由不稳定。\n准备工作 树莓派 sd卡 树莓派系统 1. 更换树莓派OS软件源 直接根据以下网址换源 raspbian | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror\n2. 开启以太网网卡混杂模式 $sudo nano /etc/network/interfaces #修改为（添加）以下内容 # interfaces(5) file used by ifup(8) and ifdown(8) # Include files from /etc/network/interfaces.d: source /etc/network/interfaces.d/* auto eth0 allow-hotplug eth0 iface eth0 inet dhcp up ip link set eth0 promisc on 3. 开启无线热点（AP） 通过图形界面创建一个热点，并配置静态v4地址为 192.168.0.254\n4. 安装docker并配置 sudo apt update -y sudo apt install docker.io -y sudo systemctl enable docker sudo systemctl start docker # 将当前用户加入docker用户组 sudo gpasswd -a $USER docker newgrp docker sudo modprobe veth 5. 创建docker网络 docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.253 -o parent=wlan0 macwan docker network create -d macvlan --subnet=x.x.x.x/24 --gateway=x.x.x.x -o parent=eth0 macwan 注意，此处的macwan网络的子网与网关需要和你当前的路由器子网相同，原因是docker在创建网络时强制要求\n6. 创建container docker run --restart always --name openwrt -d --network maclan --privileged --ip 192.168.0.1 \u0026#34;registry.cn-shanghai.aliyuncs.com/suling/openwrt:rpi4\u0026#34; /sbin/init 此处容器镜像地址为openwrt的简中immoralrt，网址为在树莓派上使用Dockers运行Openwrt并作为主路由器的旁路 - HXSup (ahsup.top) 7. 修改docker网络配置 # 进入容器 docker exec -it openwrt /bin/sh # vi /etc/config/network 主要修改成如下所示：\nconfig interface \u0026#39;lan\u0026#39; option type \u0026#39;bridge\u0026#39; option ifname \u0026#39;eth0\u0026#39; option proto \u0026#39;static\u0026#39; option ipaddr \u0026#39;192.168.0.1\u0026#39; option netmask \u0026#39;255.255.255.0\u0026#39; option ip6assign \u0026#39;60\u0026#39; 修改完成后，重启网络\n/etc/init.d/network restart 8. 连接macwan到container（host） docker network connect macwan openwrt 9. 进入openwrt控制台 使用另一台设备连接树莓派AP，并在浏览器输入192.168.0.1进入openwrt控制台，如果无法进入，检查本机得到的ip是否和树莓派AP的ip地址为同一网段，不是则手动输入\n进入后添加网络接口WAN\n并选择包括接口为eth1\n最后保存并应用，发现连上树莓派AP的设备已经能联网！\n","externalUrl":null,"permalink":"/zh-cn/pages/raspberrypi_docker_wifi/","section":"所有页面","summary":"前言 虽然树莓派4B的性能相对较强，但其网络接口的性能却并不算优秀，可作为百兆无线路由器。 使用 docker 部署 openWrt，可以在树莓派作为路由器的同时，部署其他服务。注意：该方案折腾大于使用，使用 docker 多合一可能会导致无线软路由不稳定。\n","title":"树莓派4B使用docker运行openwrt实现无线路由","type":"pages"},{"content":" 前言 最近在使用 Qt 编写一个项目时，发现 QProcess 再设定好工作目录后，仍然找不到文件，启动失败。经过上网查阅与阅读官方文档后，对此有了一个较为清晰的认知。\n先说总结：\nWindows 平台下，QProcess 类在查找外部程序时，始终在父进程的当前工作目录中查找，而不是在 setWorkingDirectory 所设置的目录中查找。只有在启动外部程序时，父进程才会从设置的工作目录查找。 该特性与 Unix 系统下不同。 仔细看官方文档。 运行环境 Windows 11 Qt Creator 16.0.0Qt Qt 6.8.2 (MSVC 2022, x86_64) 准备外部程序 为了进行测试，我准备了一份 helloworld.exe 程序。该程序是一个控制台程序，启动时在控制台打印 helloworld! 字符串。并在启动目录输出 helloworld.txt 文件（用于测试工作目录是否生效）。\n我将该程序放在了 D: 目录下，确保无误：\n错误用法 代码如下（为了直接显示运行结果，我使用了 startDetached() ，使用 start() 启动程序程序不会直接显示）：\nQObject *parent = nullptr; QProcess *process = new QProcess(parent); //wrong usage QString program = \u0026#34;helloworld.exe\u0026#34;; QStringList arguments; arguments \u0026lt;\u0026lt; \u0026#34;run\u0026#34;; process-\u0026gt;setWorkingDirectory(\u0026#34;D:/\u0026#34;); // 设置工作目录 process-\u0026gt;startDetached(program, arguments); 此处 arguments 参数是不必要的，目的是为了展示在使用时可能的需求。 运行该代码，Terminal 没有任何反应，原因是 QProcess 在当前项目目录找不到 helloworld.exe，所以启动外部程序失败了。\n正确用法 QObject *parent = nullptr; QProcess *process = new QProcess(parent); //corrcet usage QString program = \u0026#34;D:/helloworld.exe\u0026#34;; //指定程序路径，使得 QProcess 能够找到该外部程序 QStringList arguments; arguments \u0026lt;\u0026lt; \u0026#34;run\u0026#34;; process-\u0026gt;setWorkingDirectory(\u0026#34;D:/\u0026#34;); // 设置工作目录 process-\u0026gt;startDetached(program, arguments); 运行该代码，Terminal 成功输出了 “helloworld!”，且 helloworld.txt 被生成到了 D: 。\n测试 WorkingDirectory 参数作用 去除设定工作目录所在行：\nQObject *parent = nullptr; QProcess *process = new QProcess(parent); //corrcet usage QString program = \u0026#34;D:/helloworld.exe\u0026#34;; //指定程序路径，使得 QProcess 能够找到该外部程序 QStringList arguments; arguments \u0026lt;\u0026lt; \u0026#34;run\u0026#34;; // process-\u0026gt;setWorkingDirectory(\u0026#34;D:/\u0026#34;); // 设置工作目录 process-\u0026gt;startDetached(program, arguments); 运行后，Terminal 同样成功输出了 “helloworld!”，但 helloworld.txt 在当前项目运行目录生成。\n结论 QProcess 在 Windows 系统上运行外部程序时，若采用相对路径，其起始目录只能是父进程当前的当前工作目录，附上官方文档的解释：\n这说明，启动程序时，WorkingDirectory 参数并不能起到查找程序的作用，它只在 QProcess 找到应用程序后即将启动时，再切换至 WorkingDirectory 完成启动。\n该特性是否只属于 Windows 平台？ 根据官方文档所述，是的。\n以上就是本文全部内容，有问题还请指出，欢迎讨论。\n","externalUrl":null,"permalink":"/zh-cn/pages/qt_01/","section":"所有页面","summary":"前言 最近在使用 Qt 编写一个项目时，发现 QProcess 再设定好工作目录后，仍然找不到文件，启动失败。经过上网查阅与阅读官方文档后，对此有了一个较为清晰的认知。\n","title":"Windows 系统上 Qt QProcess setWorkingDirectory 不起作用","type":"pages"},{"content":"","externalUrl":null,"permalink":"/zh-cn/tags/c++/","section":"Tags","summary":"","title":"C++","type":"tags"},{"content":"","externalUrl":null,"permalink":"/zh-cn/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","externalUrl":null,"permalink":"/zh-cn/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":"","externalUrl":null,"permalink":"/zh-cn/tags/openwrt/","section":"Tags","summary":"","title":"OpenWrt","type":"tags"},{"content":"","externalUrl":null,"permalink":"/zh-cn/tags/qt/","section":"Tags","summary":"","title":"Qt","type":"tags"},{"content":"","externalUrl":null,"permalink":"/tags/raspberry-pi/","section":"Tags","summary":"","title":"Raspberry Pi","type":"tags"},{"content":"","externalUrl":null,"permalink":"/zh-cn/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","externalUrl":null,"permalink":"/zh-cn/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","externalUrl":null,"permalink":"/tags/tinkering/","section":"Tags","summary":"","title":"Tinkering","type":"tags"},{"content":"","externalUrl":null,"permalink":"/zh-cn/tags/%E6%A0%91%E8%8E%93%E6%B4%BE/","section":"Tags","summary":"","title":"树莓派","type":"tags"},{"content":"","externalUrl":null,"permalink":"/zh-cn/pages/","section":"所有页面","summary":"","title":"所有页面","type":"pages"},{"content":"","externalUrl":null,"permalink":"/zh-cn/tags/%E6%8A%98%E8%85%BE/","section":"Tags","summary":"","title":"折腾","type":"tags"},{"content":" 进度 FPGA 10%\nLinux 20%\n","externalUrl":null,"permalink":"/zh-cn/","section":"主页","summary":"进度 FPGA 10%\nLinux 20%\n","title":"主页","type":"page"}]