wayland桌面录屏,屏幕录制,Linux屏幕录制

问题

使用ffmpeg录屏后,录屏的内容是黑屏,查看后发现,自己用的是gnome桌面,但是是wayland,并不是传统的X11,这就导致了不兼容问题

echo $XDG_CURRENT_DESKTOP

可以通过上面这个命令查看桌面环境
可以返回GNOME

echo $XDG_SESSION_TYPE

可以通过上面这个命令查看类型
看看是X11还是wayland

解决方式一

直接切换到X11
编辑文件: /etc/gdm3/custom.conf

sudo vim /etc/gdm3/custom.conf

#WaylandEnable=false

注释去掉:

WaylandEnable=false

保存,退出,重启:

sudo systemctl restart gdm3

执行完成后即可。

验证

echo $XDG_SESSION_TYPE

这种方式切换后,可以使用ffmpeg进行录屏,比较通用,但是我的改过来之后,有bug,移动鼠标的时候会严重掉帧卡顿,找不到原因,所以只能接着用Wayland

解决方式二

硬着头皮用wayland
经过多种录屏软件验证,发现晚上说的一些obs,等等软件并不能在自己的系统上用,可能是系统原因,所以,经过一天时间的(血泪史)研究发现,可以使用系统自带的录屏工具

按下printscreen按键,可以选择录屏,发现这种方式是成功的

但是我是希望通过命令行去调用执行的

所以

得用脚本调用控制开始录屏和结束录屏

so

通过监听进程,找到了他调用的软件
附代码

from flask import Flask, jsonify
import dbus
import threading

app = Flask(__name__)

# 连接到 D-Bus 会话总线
session_bus = dbus.SessionBus()

# 记录录制状态
is_recording = False

# 开始录制的功能
def start_screencast():
    global is_recording
    try:
        session_bus.call_blocking(
            'org.gnome.Shell.Screencast',
            '/org/gnome/Shell/Screencast',
            'org.gnome.Shell.Screencast',
            'Screencast',
            signature='sa{sv}',
            args=["Screencast_%d_%t.webm", {'draw-cursor': True, 'framerate': 35}],
        )
        is_recording = True
        print("Screen recording started.")
    except dbus.DBusException as e:
        print(f"Failed to start recording: {e}")

# 停止录制的功能
def stop_screencast():
    global is_recording
    try:
        session_bus.call_blocking(
            'org.gnome.Shell.Screencast',
            '/org/gnome/Shell/Screencast',
            'org.gnome.Shell.Screencast',
            'StopScreencast',
            signature='',
            args=[],
        )
        is_recording = False
        print("Screen recording stopped.")
    except dbus.DBusException as e:
        print(f"Failed to stop recording: {e}")

# Flask 路由处理:启动录制
@app.route('/start', methods=['GET'])
def start_recording():
    global is_recording
    if not is_recording:
        # 在独立线程中启动录制,防止阻塞 Flask 主线程
        threading.Thread(target=start_screencast).start()
        return jsonify({"message": "Recording started!"}), 200
    else:
        return jsonify({"message": "Recording is already running."}), 400

# Flask 路由处理:停止录制
@app.route('/stop', methods=['GET'])
def stop_recording():
    global is_recording
    if is_recording:
        stop_screencast()
        return jsonify({"message": "Recording stopped!"}), 200
    else:
        return jsonify({"message": "No recording in progress."}), 400

if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0', port=5000)

太抽象了
太抽象了
卡了一天

|
|
|
伤心
|
|
|
在这里插入图片描述

### 安装 Simple Screen Recorder 的方法 Simple Screen Recorder 是一款功能强大的屏幕录制工具,支持多种操作系统环境下的需求。要通过 snap 正确安装 Simple Screen Recorder 并确保其正常工作,可以按照以下方式操作。 #### 使用 Snap 进行安装 Snap 是一种现代化的软件包管理技术,能够跨不同 Linux 发行版提供一致的应用程序体验。以下是具体的操作命令: ```bash sudo snap install simplescreenrecorder ``` 此命令会从官方 Snap 商店下载并安装最新版本的 Simple Screen Recorder[^1]。 #### 配置权限 由于 Simple Screen Recorder 需要访问桌面和音频设备来完成录制任务,在某些情况下可能需要额外配置权限。可以通过以下命令授予必要的权限: ```bash snap connect simplescreenrecorder:audio-record snap connect simplescreenrecorder:camera snap connect simplescreenrecorder:x11-common ``` 这些命令分别允许应用记声音、使用摄像头以及与 X11 显示服务器交互。如果当前系统运行的是 Wayland 而不是传统的 X11,则需要注意部分功能可能会受限于 Wayland 协议的安全模型[^2]。 #### 启动应用程序 安装完成后,可通过以下两种方式启动 Simple Screen Recorder: - 在终端输入 `simplescreenrecorder` 手动执行; - 或者通过图形界面中的应用程序菜单查找已安装的 “SimpleScreenRecorder”。 #### 注意事项 对于采用 Wayland 作为默认显示协议的新一代 Linux 系统而言,Simple Screen Recorder 可能无法直接捕获整个屏幕的内容。这是因为 Wayland 设计上更加注重安全性,默认限制了未经许可截取其他窗口画面的行为。此时建议切换回兼容模式或者尝试 Weston Compositor 提供的相关选项以解决该问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霍志杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值