需求:用命令将屏幕从横屏改为竖屏
首先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
加持久化参数会弹窗确认,不符合我需求,所以不用,直接每次开机执行一次。
原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/5606.html