如何在Raspberry Pi上禁用/启用HDMI?

Ala*_*irG 5 c hdmi raspberry-pi

所以我可以使用"tvservice -o"来关闭覆盆子Pi上的HDMI,并使用"tvservice -p"将其重新打开.重新打开之后我显然需要做"fbset -depth 8 && fbset -depth 16"来重新启用帧缓冲区,然后强制重写X11.

我的问题是,我如何在C中这样做?我有一个X11应用程序,我可以管理X11重绘没问题,但如何在C中禁用/重新启用HDMI,以及如何在重新启用HDMI后重新启用帧缓冲?

为了给出背景知识,我有一个无头应用程序作为一种媒体服务器运行,由Android应用程序控制.目前,我暂时禁用超时后关闭HDMI.然而,为了节省能量,我想在不使用应用程序时禁用HDMI,然后重新打开并使用libcec在屏幕上显示RPi应用程序,以确定电视何时使用RPi的HDMI连接打开HDMI和关闭.

Pro*_*ica 5

如果你想使用纯C,请查看源代码tvservice,这是一个C程序.它可以在github上找到.它似乎使用了中vc_tv_hdmi_power_on_preferred();定义的函数#include "interface/vmcs_host/vc_tvservice.h"

如果您决定tvservice像@ moffeltje的答案那样调用该程序,您可以使用execl()它更安全 - 您必须提供二进制文件的完整路径.(使用execlp,您还可以控制环境变量):

pid_t pid;


pid = fork();
if (0 == pid) {
    execl("/opt/vc/bin/tvservice", "-p", NULL);
}
if (-1 == pid) {
    // Handle error here, close program?
}
Run Code Online (Sandbox Code Playgroud)