Rootop 服务器运维与web架构

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

加持久化参数会弹窗确认,不符合我需求,所以不用,直接每次开机执行一次。

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/5606.html

作者:Venus

服务器运维与性能优化

评论已关闭。