显示器从横屏改为竖屏,即向右顺时针转90度。
在ubuntu24桌面系统中,设置-显示-需要选为 Portrait Right 后,画面才是正的。
可以按照下面理解:
从用户角度来讲,应该是向左旋转90度。
从系统角度来讲,是向右旋转90度。
所以显示设置中的选项是站在系统角度配置的。不应该站在用户角度决定是左是右。
2025-07-24
发表者 Venus
ubuntu-显示器横屏顺时针旋转90度后系统显示需要配置为Portrait Right的疑问已关闭评论
显示器从横屏改为竖屏,即向右顺时针转90度。
在ubuntu24桌面系统中,设置-显示-需要选为 Portrait Right 后,画面才是正的。
可以按照下面理解:
从用户角度来讲,应该是向左旋转90度。
从系统角度来讲,是向右旋转90度。
所以显示设置中的选项是站在系统角度配置的。不应该站在用户角度决定是左是右。
2025-07-24
发表者 Venus
ubuntu24桌面版-使用命令旋转屏幕已关闭评论
需求:用命令将屏幕从横屏改为竖屏
首先ubuntu24桌面版是使用wayland协议和mutter合成器实现的图形显示。
合成器是负责合成窗口、管理显示器、动画和图形渲染的组件。
xrandr这个命令是x11协议下的旋转方法,不适用于wayland。
其次使用 gsettings 命令修改gnome的桌面配置也没有找到对应项(可能系统版本问题),命令如下:
gsettings set org.gnome.desktop.screen.orientation 'left' 或者 gsettings set org.gnome.settings-daemon.plugins.orientation active true
所以这个方法也不通。
wlr-randr 命令只适用于 sway、wayfire、hyprland、river合成器。
并不支持gnome的mutter或者kde的kwin合成器。
# 测试过程,在桌面环境中的命令行执行
export XDG_RUNTIME_DIR=/run/user/$(id -u) wlr-randr --output HDMI-1 --transform 270
会提示下面错误,即不支持协议
compositor doesn’t support wlr-output-management-unstable-v1
# 确定是不是用的mutter admin@rd-GMB5188:/sys/class/drm$ ps aux |grep -E "wayland|mutter" admin 1330 0.0 0.0 235668 5888 tty2 Ssl+ 02:10 0:00 /usr/libexec/gdm-wayland-session env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --session=ubuntu admin 2148 2.7 0.5 567312 83616 ? Sl 02:10 5:40 /usr/bin/Xwayland :0 -rootless -noreset -accessx -core -auth /run/user/1000/.mutter-Xwaylandauth.FTS492 -listenfd 4 -listenfd 5 -displayfd 6 -initfd 7 -byteswappedclients admin 2275 0.0 0.6 1084124 101692 ? Sl 02:10 0:00 /usr/libexec/mutter-x11-frames
可以看到 wayland 和 mutter 字眼。
# 有效方法 使用 gnome-randr 命令行工具
gnome-randr是一个为GNOME/Wayland设计的工具,模仿xrandr的功能,通过Mutter的D-Bus API管理显示设置。
# gnome-randr需要从源码安装。 git clone https://gitlab.com/Oschowa/gnome-randr.git cd gnome-randr # 确保安装了依赖: sudo apt update sudo apt install python3 python3-gi 直接运行脚本使用 gnome-randr.py # 查看当前显示器配置: ./gnome-randr.py 会列出所有连接的显示器及其输出名称(如 HDMI-1、eDP-1)。 # 旋转屏幕: 使用以下命令旋转指定显示器: ./gnome-randr.py --output <output-name> --rotate <orientation> 其中: <output-name> 是显示器的输出名称(如 eDP-1)。 <orientation> 可以是 normal、left、right 或 inverted。 # 示例(将屏幕旋转 90 度逆时针): ./gnome-randr.py --output eDP-1 --rotate left # 持久化设置: gnome-randr 支持 --persistent 选项保存设置: ./gnome-randr.py --output eDP-1 --rotate left --persistent 如果需要开机自动应用,可以将命令添加到启动脚本(如 ~/.config/autostart)。
# 补充资料 – 获取连接显示器的接口名
/sys/class/drm 是一个虚拟文件系统(sysfs)目录,与 DRM(Direct Rendering Manager) 相关,用于管理图形显示设备(例如显卡、显示器接口等)。
# 通过下面脚本确定接口名称
display_port="" for dev in /sys/class/drm/*/status; do if grep -qw connected $dev; then display_port=`echo $(basename "$(dirname "$dev")")| sed 's/card[0-9]-//'g | sed 's/-[A-Z]//g'` fi done echo "### SET $display_port ###"
把 card1-HDMI-A-1 格式化为 HDMI-1 ,然后给gnome-randr.py做为参数用。
# status 文件值
connected:显示器已连接
disconnected:无显示器连接。
通过连接状态判断接口
# 旋转
/home/admin/gnome-randr/gnome-randr.py --output HDMI-1 --rotate left
加持久化参数会弹窗确认,不符合我需求,所以不用,直接每次开机执行一次。
2025-07-15
发表者 Venus
CURL error: SSL certificate problem: unable to get local issuer certificate已关闭评论
php curl报错:
CURL error: SSL certificate problem: unable to get local issuer certificate, on POST https://api.x.com/API/SELogin.php
在curl里使用了CURLOPT_CAINFO参数指定了根ca证书路径(自签名),然后去调用接口。
在centos7下,调用接口正常,请求其它可信证书的https地址也正常。
在almalinux9下,调用接口正常,请求其它可信证书的https地址报错,即上面的错误。
AI了一下,问题可能出在 OpenSSL 和 cURL 构建差异。
AlmaLinux9的cURL可能使用了更严格的 OpenSSL 验证策略。
如果设置了CURLOPT_CAINFO,它会完全忽略系统默认CA,只使用指定的ca.crt,这在AlmaLinux9下更容易触发验证失败。
# 解决方式,将系统内置的可信根证书与自签名的根证书合并
[root@web cert]# cat /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem >> ca.crt
或者参考 https://www.rootop.org/pages/5443.html
将自签名根证书放到系统中,做为内置可信根证书。
2025-07-15
发表者 Venus
ubuntu24 dns配置-systemd-resolved已关闭评论
系统版本:Ubuntu 24.04
# 查看传统dns配置文件 root@rd:~# cat /etc/resolv.conf | grep -Ev "^#|^$" nameserver 127.0.0.53 options edns0 trust-ad search . 上面3个参数的解释 将 DNS 请求发送给本地 systemd-resolved 的 stub 代理 开启 DNS 扩展(EDNS0)并信任上游的 DNSSEC 验证状态 空值,表示不追加任何搜索域 # 同时此文件是一个软链接 root@rd:~# ll /etc/resolv.conf lrwxrwxrwx 1 root root 39 Apr 23 2024 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf # 查看本地是否监听53 root@rd:~# netstat -tnlp | grep -w 53 tcp 0 0 127.0.0.54:53 0.0.0.0:* LISTEN 857/systemd-resolve tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 857/systemd-resolve 可以看到是由 systemd-resolve 进程控制,实际为 systemd-resolved 服务 # 修改服务配置文件 /etc/systemd/resolved.conf 找到 [Resolve] 区块,修改如下: [Resolve] DNS=8.8.8.8 1.1.1.1 FallbackDNS=9.9.9.9 DNSStubListener=yes 上面3个参数的解释: 主DNS服务器列表,优先使用这些服务器解析域名。多个地址之间用空格隔开,按顺序尝试。 当主DNS不可用或响应失败时使用的备用DNS。 启用或禁用本地DNS stub监听器,它通常监听在 127.0.0.53:53 重启服务使配置生效: systemctl restart systemd-resolved 验证 DNS 是否更新: resolvectl status resolvectl flush-caches 也可以修改 /etc/netplan/*.yaml 下配置文件,最终也会是由systemd-resolved接管新的配置。 DHCP 获取的 DNS 也会被 systemd-resolved 接收。 ######################### root@rd:~# resolvectl status Global Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported resolv.conf mode: stub Link 2 (ens33) Current Scopes: DNS Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 8.8.8.8 DNS Servers: 8.8.4.4
2025-06-30
发表者 Venus
nginx配置mTLS双向认证已关闭评论
环境 almalinux9.3
openssl版本 3.x
证书生成简化脚本
#!/bin/bash # 1、生成私钥公钥,自己作为CA机构。 echo "#############################################################################################################" echo "生成CA证书" mkdir ca && cd ca openssl genpkey -algorithm RSA -out ca.key -pkeyopt rsa_keygen_bits:2048 openssl req -new -key ca.key -out ca.csr cat <<EOF > v3_ca.ext basicConstraints = critical, CA:TRUE keyUsage = critical, keyCertSign, cRLSign subjectKeyIdentifier = hash EOF openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt -days 3650 -extfile v3_ca.ext # 注意这里明确声明自己作为CA,CA:TRUE。 echo "#############################################################################################################" cd .. # 给服务器(域名)颁发证书 echo "#############################################################################################################" echo "生成域名证书" mkdir server && cd server openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048 openssl req -new -key server.key -out server.csr # 创建一个SAN文件 cat <<EOF > san.conf authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = www.test.com DNS.2 = test.x.com IP.1 = 127.0.0.1 IP.1 = 192.168.6.114 EOF # 用ca的证书给csr颁发证书 openssl x509 -req -in server.csr -CA ../ca/ca.crt -CAkey ../ca/ca.key -CAcreateserial -out server.crt -days 365 -extfile san.conf # 验证证书链 echo "验证证书链" openssl verify -CAfile ../ca/ca.crt server.crt #如果输出 server.crt: OK,说明证书链正确。 echo "#############################################################################################################" cd .. echo "#############################################################################################################" echo "生成客户端证书" mkdir client && cd client openssl genpkey -algorithm RSA -out client.key -pkeyopt rsa_keygen_bits:2048 openssl req -new -key client.key -out client.csr openssl x509 -req -in client.csr -CA ../ca/ca.crt -CAkey ../ca/ca.key -CAcreateserial -out client.crt -days 365 echo "#############################################################################################################" rm -f /home/software/openresty/nginx/conf/vhost/server/* cp ../server/* /home/software/openresty/nginx/conf/vhost/server/ cp ../ca/ca.crt /home/software/openresty/nginx/conf/vhost/server/ /home/software/openresty/nginx/sbin/nginx -s reload echo "curl访问" curl --cert client.crt --key client.key --cacert ../ca/ca.crt https://www.test.com # 为了将证书导入到浏览器,生成p12格式 openssl pkcs12 -export -inkey client.key -in client.crt -out client.p12 -name "ClientCert" # nginx配置 server { listen 80; listen 443 ssl; http2 on; server_name www.test.com; root /www; index index.php index.html; ssl_certificate /home/software/openresty/nginx/conf/vhost/server/server.crt; ssl_certificate_key /home/software/openresty/nginx/conf/vhost/server/server.key; ssl_session_timeout 5m; ssl_protocols TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_verify_client on; ssl_client_certificate /home/software/openresty/nginx/conf/vhost/server/ca.crt; client_max_body_size 100M; server_tokens off; fastcgi_hide_header X-Powered-By; location ~ \.php$ { fastcgi_split_path_info ^((?U).+.php)(/?.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_pass 127.0.0.1:10000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param RGS_COREPATHNAME GameMotors; include fastcgi_params; } access_log /var/log/nginx/www.test.com-access.log; error_log /var/log/nginx/www.test.com-error.log; } # ssl_verify_client on 是开启验证客户端证书。 # ssl_client_certificate 这个参数告诉nginx我信任这个文件中的 CA,如果客户端提交的证书是由这些 CA 签发的,那我就接受。
1、首先双击 ca.crt 文件,导入到本地,选择 受信任的根证书颁发机构。这样浏览器才会信任,不会报不安全。
2、Chrome浏览器导入p12证书,点击 设置 – 隐私与安全 – 安全 – 管理证书 – 您的证书 – 管理从Windows导入的证书
点击 导入,选择刚才的p12证书文件。 “证书存储” 部分,选择 “将所有的证书都放入下列存储”,选择 “个人” ,完成。
浏览器访问 https://www.test.com/ 会弹窗选择客户端证书。
如果不导入证书,则访问时nginx会报下面错误