常见问题:修订间差异
创建页面,内容为“== 烧录固件时,/dev/ttyUSB0没有权限。 == 在很多时候,在Linux下需要使用USB串口调试烧录固件,如果不是使用root用户,极有可能遇到权限问题。 比较野蛮的方法是使用chmod 修改权限(缺点是USB重新插拔后将失效),代码如下:<syntaxhighlight lang="bash" line="1"> sudo chmod 777 /dev/ttyUSB0 </syntaxhighlight>第二中方法为查看/dev/ttyUSB0的所属用户组(通过ls -al /dev/ttyUSB0查看,ubuntu22…” |
|||
(未显示同一用户的22个中间版本) | |||
第4行: | 第4行: | ||
比较野蛮的方法是使用chmod 修改权限(缺点是USB重新插拔后将失效),代码如下:<syntaxhighlight lang="bash" line="1"> | 比较野蛮的方法是使用chmod 修改权限(缺点是USB重新插拔后将失效),代码如下:<syntaxhighlight lang="bash" line="1"> | ||
sudo chmod 777 /dev/ttyUSB0 | sudo chmod 777 /dev/ttyUSB0 | ||
</syntaxhighlight> | </syntaxhighlight>第二种方法为查看/dev/ttyUSB0的所属用户组(通过ls -al /dev/ttyUSB0查看,ubuntu22.04下为dialout),将当前用户添加至该用户组,重新登陆生效。代码如下:<syntaxhighlight lang="bash" line="1"> | ||
#在ubuntu 22.04下测试通过。添加一次,始终有效 | #在ubuntu 22.04下测试通过。添加一次,始终有效 | ||
sudo adduser `id -nu` dialout | sudo adduser `id -nu` dialout | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Windows与Linux双系统切换时时间改变。 == | |||
主要是Windows与Linux对待硬件时钟的方式不一样。将Windows改为UTC时间,注册表如下:<syntaxhighlight lang="registry" line="1"> | |||
Windows Registry Editor Version 5.00 | |||
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation] | |||
"RealTimeIsUniversal"=dword:00000001 | |||
</syntaxhighlight> | |||
== Windows11硬件兼容性设置 == | |||
众所周知,Windows11对硬件有了较多要求,如TPM,为了在相对老旧(性能尚可但不符合Windows11官方安装程序要求)的平台上安装Windows11,注册表如下:<syntaxhighlight lang="registry" line="1"> | |||
Windows Registry Editor Version 5.00 | |||
[HKEY_LOCAL_MACHINE\SYSTEM\Setup\LabConfig] | |||
"BypassTPMCheck"=dword:00000001 | |||
"BypassSecureBootCheck"=dword:00000001 | |||
"BypassRAMCheck"=dword:00000001 | |||
"BypassStorageCheck"=dword:00000001 | |||
"BypassCPUCheck"=dword:00000001 | |||
</syntaxhighlight> | |||
== Linux(如ubuntu)下设置代理。 == | |||
在编译[[openwrt]]或者[[buildroot]]时,需要下载大量的源代码,此过程及其容易因为网速问题而失败(如只有几KB的网速)。 | |||
如果设置代理到国外(如硅谷),则能极大提高编译成功率。 | |||
openwrt/buildroot通常采用wget/curl作为下载工具。 | |||
下列为通过环境变量设置代理的方式(视情况不止wget或curl支持)。 | |||
{| class="wikitable" | |||
|+Wget支持的环境变量 | |||
!变量名称 | |||
!说明 | |||
!备注 | |||
|- | |||
|http_proxy | |||
|http代理 | |||
| | |||
|- | |||
|https_proxy | |||
|https代理 | |||
| | |||
|- | |||
|ftp_proxy | |||
|ftp代理 | |||
| | |||
|- | |||
|no_proxy | |||
|不代理的地址 | |||
|多个地址采用逗号分割,支持域名。如.cn表示中国的域名不使用代理 | |||
|} | |||
{| class="wikitable" | |||
|+curl支持的环境变量 | |||
!变量名称 | |||
!说明 | |||
!备注 | |||
|- | |||
|http_proxy | |||
|http代理 | |||
|唯一为小写的环境变量 | |||
|- | |||
|HTTPS_PROXY | |||
|https代理 | |||
| | |||
|- | |||
|[url-protocol]_PROXY | |||
|其它协议代理 | |||
|[url-protocol]为协议,如HTTPS则为https代理。 | |||
|- | |||
|ALL_PROXY | |||
|默认代理 | |||
|如某个协议未设置代理,则使用此值 | |||
|- | |||
|NO_PROXY | |||
|不代理的地址 | |||
|多个地址采用逗号分割,支持域名。如.cn表示中国的域名不使用代理 | |||
|} | |||
== 在Linux终端中使用与文件后缀关联的程序打开文件 == | |||
在Windows的cmd窗口中,可使用文件名直接打开非可执行文件。而在Linux的终端中却没有此功能(Linux不靠文件后缀名判断文件类型)。 | |||
* 要在Linux的终端中要通过文件后缀名使用相应程序打开文件,可使用<code>mimeopen</code>命令,具体用法可使用<code>man mimeopen</code>命令查看帮助。 | |||
* 在桌面环境中,针对桌面应用可使用xdg-utils包的<code>xdg-open</code>工具, | |||
== 在Linux中不使用docker exec 进入容器 == | |||
使用docker exec可方便进入容器, 但也有其缺点,即不能使用容器外的工具。有时需要排查网络,但容器中又无相关工具,便可以使用nsenter命令。<syntaxhighlight lang="bash" line="1"> | |||
#在使用nsenter命令前,需要获取目标容器中进程的pid,可通过ps -ef查看,下面使用pid代指目标容器的pid。 | |||
#进入容器(基本等于docker exec) | |||
nsenter -a -t pid 程序名及参数 | |||
#只使用容器网络 | |||
nsenter -n -t pid 程序名及参数 | |||
</syntaxhighlight> | |||
== 在WSL2中启动systemd == | |||
通常为了使用docker,需要启动systemd,但systemd作为系统管理程序必须在pid为1时启动,因此可以使用unshare命令启动一个新的namespace绕过pid检测。 | |||
可使用以下命令启动systemd(在ubuntu 22.04中测试通过)。<syntaxhighlight lang="bash" line="1"> | |||
#启用systemd,只能启动一次(电脑重启或者wsl2闪退需要重新执行) | |||
sudo setsid unshare --fork -p --mount-proc /lib/systemd/systemd | |||
</syntaxhighlight>当systemd启动成功后,即可拉取镜像,测试镜像了。如需自启动可尝试修改/etc/profile或者添加脚本到/etc/profile.d/目录。 | |||
注意:此方法主要解决了启动systemd的问题,由于使用了namespace,需要使用nsenter进入namespace才能使用systemctl等命令。<syntaxhighlight lang="bash" line="1"> | |||
#使用nsenter需要获取systemd的进程pid,请使用ps -ef获取相关pid | |||
sudo nsenter -p -t pid 命令 | |||
</syntaxhighlight> | |||
== WSL1中libQt5Core.so.5无效 == | |||
直接使用strip移除.note.ABI-tag即可.<syntaxhighlight lang="bash" line="1"> | |||
sudo strip -R .note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 | |||
</syntaxhighlight> | |||
== TCP/UDP 端口分配 == | |||
INNA端口分配:https://www.iana.org/assignments/service-names-port-numbers | |||
== 使用代理访问github.com == | |||
由于网络原因,有时访问github.com时断时续且速度极慢,可通过代理访问github.com加快速度。 | |||
此处不展开描述代理服务的搭建,在进行下面的操作时需要有效的http/https代理服务器,否则操作完成后可能无法正常访问github.com。 | |||
=== HTTP/HTTPS代理 === | |||
HTTP/HTTPS代理均可使用git配置完成,如下:<syntaxhighlight lang="bash" line="1"> | |||
git config --global http.proxy http://代理服务器:端口 | |||
git config --global https.proxy http://代理服务器:端口 | |||
</syntaxhighlight> | |||
=== SSH代理 === | |||
SSH代理与HTTP/HTTPS代理不同,并非修改git配置而是修改ssh配置,利用ProxyCommand执行一个程序用于转发通信使用。 | |||
一般情况下,ssh全局配置的路径为/etc/ssh/ssh_config。 | |||
==== MSYS2/Cygwin环境 ==== | |||
ssh_config配置新增配置如下:<syntaxhighlight lang="text" line="1"> | |||
Host github.com | |||
Port 22 | |||
ProxyCommand /usr/bin/connect.exe -H 代理服务器:端口 %h %p | |||
</syntaxhighlight>其中,connect命令需要手动下载并放入/usr/bin目录中。 | |||
[[文件:Connect.zip|居中]] | |||
connect源代码:https://github.com/gotoh/ssh-connect.git | |||
==== Linux环境 ==== | |||
ssh_config配置新增配置如下:<syntaxhighlight lang="text" line="1"> | |||
Host github.com | |||
Port 22 | |||
ProxyCommand /usr/bin/nc -X connect -x 代理服务器:端口 %h %p | |||
</syntaxhighlight>通过nc(netcat)命令转发数据。 | |||
== 不使用root用户操作docker == | |||
通常情况下,使用sudo直接操作docker,但sudo会切换到root用户,当使用virtualenv解决docker-compose的兼容问题时比较麻烦。 | |||
如果将当前用户加入docker用户组(在安装docker时创建)即可实现不使用sudo进行docker操作。<syntaxhighlight lang="bash" line="1"> | |||
#在ubuntu 24.04下测试通过。添加一次,重新登陆用户有效。 | |||
sudo adduser `id -nu` docker | |||
</syntaxhighlight> | |||
== docker使用代理拉取镜像 == | |||
由于种种原因,docker拉取镜像时速度极慢且极其容易失败,使用代理可提高拉取速度(另一种方法是使用docker镜像网站)。 | |||
注意:此方法需要先手动搭建代理,示例地址:<code>http://127.0.0.1:10809</code>需要替换为实际http代理地址。 | |||
docker与其它Linux程序一样,可通过以下环境变量设置代理: | |||
* http_proxy:设置http使用的代理。 | |||
* https_proxy:设置https使用的代理。 | |||
* no_proxy:设置不使用代理的地址。 | |||
由于实例的网络操作是由守护进程完成,因此环境变量需要在守护进程启动时设置(终端上的设置无效)。 | |||
若只需要修改docker守护进程,对于系统自带的docker可修改<code>/lib/systemd/system/docker.service,在Service节添加如下内容:</code><syntaxhighlight lang="ini" line="1"> | |||
# 在[Service]下添加如下内容 | |||
Environment="http_proxy=http://127.0.0.1:10809" | |||
Environment="https_proxy=http://127.0.0.1:10809" | |||
</syntaxhighlight>修改完成后使用以下命令重启docker:<syntaxhighlight lang="bash" line="1"> | |||
sudo systemctl daemon-reload | |||
sudo systemctl restart docker | |||
</syntaxhighlight>除了使用上述方法,若系统中有如下环境变量文件: | |||
* /etc/default/docker:仅修改docker默认设置 | |||
* /etc/environment:修改整个系统的环境变量,会影响除了docker之外的程序。 | |||
在环境变量文件中添加如下行也可起到设置代理的作用:<syntaxhighlight lang="bash" line="1"> | |||
http_proxy=http://127.0.0.1:10809 | |||
https_proxy=http://127.0.0.1:10809 | |||
</syntaxhighlight> | |||
== 自签CA证书安装 == | |||
由于免费的证书时限太短,因此尝试使用自签证书作为ssl证书用于网站服务,不使用https证书时可采用http访问。 | |||
注意:下列示例中的证书下载地址:http://hyhsystem.cn/hyhsystem.cn.ca.crt | |||
=== Windows下自签CA证书安装 === | |||
* 下载待安装的证书(有些浏览器有安全提示,忽略即可)。 | |||
* 双击证书,点击安装按钮。 | |||
* 存储位置选择 '''本地计算机''' 。 | |||
* 证书存储选择 '''受信任的根证书颁发机构 。''' | |||
* 点击下一步直到完成后退出。 | |||
=== Ubuntu下自签CA证书安装 === | |||
注意:其它Debian系Linux系统也可参考本段落的操作。 | |||
* 下载待安装的证书(有些浏览器有安全提示,忽略即可)。 | |||
* 将证书文件放入'''/usr/local/share/ca-certificates''' (需要root权限) | |||
* 使用root权限执行<code>update-ca-certificates</code> | |||
以上操作仅适用于系统的ssl证书,对类似curl、wget等应用生效。若是浏览器需查看具体浏览器的设置方法。 | |||
=== Firefox浏览器自签CA证书的安装 === | |||
* 下载待安装的证书(有些浏览器有安全提示,忽略即可)。 | |||
* 打开<code>about:preferences#privacy</code> | |||
* 找到查看证书选项,点击导入按钮导入相应的证书文件。 |
2024年7月11日 (四) 10:59的最新版本
烧录固件时,/dev/ttyUSB0没有权限。
在很多时候,在Linux下需要使用USB串口调试烧录固件,如果不是使用root用户,极有可能遇到权限问题。
比较野蛮的方法是使用chmod 修改权限(缺点是USB重新插拔后将失效),代码如下:
sudo chmod 777 /dev/ttyUSB0
第二种方法为查看/dev/ttyUSB0的所属用户组(通过ls -al /dev/ttyUSB0查看,ubuntu22.04下为dialout),将当前用户添加至该用户组,重新登陆生效。代码如下:
#在ubuntu 22.04下测试通过。添加一次,始终有效
sudo adduser `id -nu` dialout
Windows与Linux双系统切换时时间改变。
主要是Windows与Linux对待硬件时钟的方式不一样。将Windows改为UTC时间,注册表如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001
Windows11硬件兼容性设置
众所周知,Windows11对硬件有了较多要求,如TPM,为了在相对老旧(性能尚可但不符合Windows11官方安装程序要求)的平台上安装Windows11,注册表如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\Setup\LabConfig]
"BypassTPMCheck"=dword:00000001
"BypassSecureBootCheck"=dword:00000001
"BypassRAMCheck"=dword:00000001
"BypassStorageCheck"=dword:00000001
"BypassCPUCheck"=dword:00000001
Linux(如ubuntu)下设置代理。
在编译openwrt或者buildroot时,需要下载大量的源代码,此过程及其容易因为网速问题而失败(如只有几KB的网速)。
如果设置代理到国外(如硅谷),则能极大提高编译成功率。
openwrt/buildroot通常采用wget/curl作为下载工具。
下列为通过环境变量设置代理的方式(视情况不止wget或curl支持)。
变量名称 | 说明 | 备注 |
---|---|---|
http_proxy | http代理 | |
https_proxy | https代理 | |
ftp_proxy | ftp代理 | |
no_proxy | 不代理的地址 | 多个地址采用逗号分割,支持域名。如.cn表示中国的域名不使用代理 |
变量名称 | 说明 | 备注 |
---|---|---|
http_proxy | http代理 | 唯一为小写的环境变量 |
HTTPS_PROXY | https代理 | |
[url-protocol]_PROXY | 其它协议代理 | [url-protocol]为协议,如HTTPS则为https代理。 |
ALL_PROXY | 默认代理 | 如某个协议未设置代理,则使用此值 |
NO_PROXY | 不代理的地址 | 多个地址采用逗号分割,支持域名。如.cn表示中国的域名不使用代理 |
在Linux终端中使用与文件后缀关联的程序打开文件
在Windows的cmd窗口中,可使用文件名直接打开非可执行文件。而在Linux的终端中却没有此功能(Linux不靠文件后缀名判断文件类型)。
- 要在Linux的终端中要通过文件后缀名使用相应程序打开文件,可使用
mimeopen
命令,具体用法可使用man mimeopen
命令查看帮助。 - 在桌面环境中,针对桌面应用可使用xdg-utils包的
xdg-open
工具,
在Linux中不使用docker exec 进入容器
使用docker exec可方便进入容器, 但也有其缺点,即不能使用容器外的工具。有时需要排查网络,但容器中又无相关工具,便可以使用nsenter命令。
#在使用nsenter命令前,需要获取目标容器中进程的pid,可通过ps -ef查看,下面使用pid代指目标容器的pid。
#进入容器(基本等于docker exec)
nsenter -a -t pid 程序名及参数
#只使用容器网络
nsenter -n -t pid 程序名及参数
在WSL2中启动systemd
通常为了使用docker,需要启动systemd,但systemd作为系统管理程序必须在pid为1时启动,因此可以使用unshare命令启动一个新的namespace绕过pid检测。
可使用以下命令启动systemd(在ubuntu 22.04中测试通过)。
#启用systemd,只能启动一次(电脑重启或者wsl2闪退需要重新执行)
sudo setsid unshare --fork -p --mount-proc /lib/systemd/systemd
当systemd启动成功后,即可拉取镜像,测试镜像了。如需自启动可尝试修改/etc/profile或者添加脚本到/etc/profile.d/目录。 注意:此方法主要解决了启动systemd的问题,由于使用了namespace,需要使用nsenter进入namespace才能使用systemctl等命令。
#使用nsenter需要获取systemd的进程pid,请使用ps -ef获取相关pid
sudo nsenter -p -t pid 命令
WSL1中libQt5Core.so.5无效
直接使用strip移除.note.ABI-tag即可.
sudo strip -R .note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
TCP/UDP 端口分配
INNA端口分配:https://www.iana.org/assignments/service-names-port-numbers
使用代理访问github.com
由于网络原因,有时访问github.com时断时续且速度极慢,可通过代理访问github.com加快速度。
此处不展开描述代理服务的搭建,在进行下面的操作时需要有效的http/https代理服务器,否则操作完成后可能无法正常访问github.com。
HTTP/HTTPS代理
HTTP/HTTPS代理均可使用git配置完成,如下:
git config --global http.proxy http://代理服务器:端口
git config --global https.proxy http://代理服务器:端口
SSH代理
SSH代理与HTTP/HTTPS代理不同,并非修改git配置而是修改ssh配置,利用ProxyCommand执行一个程序用于转发通信使用。
一般情况下,ssh全局配置的路径为/etc/ssh/ssh_config。
MSYS2/Cygwin环境
ssh_config配置新增配置如下:
Host github.com
Port 22
ProxyCommand /usr/bin/connect.exe -H 代理服务器:端口 %h %p
其中,connect命令需要手动下载并放入/usr/bin目录中。
connect源代码:https://github.com/gotoh/ssh-connect.git
Linux环境
ssh_config配置新增配置如下:
Host github.com
Port 22
ProxyCommand /usr/bin/nc -X connect -x 代理服务器:端口 %h %p
通过nc(netcat)命令转发数据。
不使用root用户操作docker
通常情况下,使用sudo直接操作docker,但sudo会切换到root用户,当使用virtualenv解决docker-compose的兼容问题时比较麻烦。
如果将当前用户加入docker用户组(在安装docker时创建)即可实现不使用sudo进行docker操作。
#在ubuntu 24.04下测试通过。添加一次,重新登陆用户有效。
sudo adduser `id -nu` docker
docker使用代理拉取镜像
由于种种原因,docker拉取镜像时速度极慢且极其容易失败,使用代理可提高拉取速度(另一种方法是使用docker镜像网站)。
注意:此方法需要先手动搭建代理,示例地址:http://127.0.0.1:10809
需要替换为实际http代理地址。
docker与其它Linux程序一样,可通过以下环境变量设置代理:
- http_proxy:设置http使用的代理。
- https_proxy:设置https使用的代理。
- no_proxy:设置不使用代理的地址。
由于实例的网络操作是由守护进程完成,因此环境变量需要在守护进程启动时设置(终端上的设置无效)。
若只需要修改docker守护进程,对于系统自带的docker可修改/lib/systemd/system/docker.service,在Service节添加如下内容:
# 在[Service]下添加如下内容
Environment="http_proxy=http://127.0.0.1:10809"
Environment="https_proxy=http://127.0.0.1:10809"
修改完成后使用以下命令重启docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
除了使用上述方法,若系统中有如下环境变量文件:
- /etc/default/docker:仅修改docker默认设置
- /etc/environment:修改整个系统的环境变量,会影响除了docker之外的程序。
在环境变量文件中添加如下行也可起到设置代理的作用:
http_proxy=http://127.0.0.1:10809
https_proxy=http://127.0.0.1:10809
自签CA证书安装
由于免费的证书时限太短,因此尝试使用自签证书作为ssl证书用于网站服务,不使用https证书时可采用http访问。
注意:下列示例中的证书下载地址:http://hyhsystem.cn/hyhsystem.cn.ca.crt
Windows下自签CA证书安装
- 下载待安装的证书(有些浏览器有安全提示,忽略即可)。
- 双击证书,点击安装按钮。
- 存储位置选择 本地计算机 。
- 证书存储选择 受信任的根证书颁发机构 。
- 点击下一步直到完成后退出。
Ubuntu下自签CA证书安装
注意:其它Debian系Linux系统也可参考本段落的操作。
- 下载待安装的证书(有些浏览器有安全提示,忽略即可)。
- 将证书文件放入/usr/local/share/ca-certificates (需要root权限)
- 使用root权限执行
update-ca-certificates
以上操作仅适用于系统的ssl证书,对类似curl、wget等应用生效。若是浏览器需查看具体浏览器的设置方法。
Firefox浏览器自签CA证书的安装
- 下载待安装的证书(有些浏览器有安全提示,忽略即可)。
- 打开
about:preferences#privacy
- 找到查看证书选项,点击导入按钮导入相应的证书文件。