linux 使用RPI上的CEC客户端关闭电视

f87krz0w  于 2023-01-12  发布在  Linux
关注(0)|答案(5)|浏览(193)

我有RPi B+运行Raspbian通过HDMI连接到我的LG电视.我成功地编译并安装了cec客户端,我可以轻松地打开电视使用命令echo "on 0" | cec-client -s,但是当我试图关闭电视使用命令echo "standby 0" | cec-client -s我得到这个输出:

opening a connection to the CEC adapter...
DEBUG:   [             316]     unregistering all CEC clients
DEBUG:   [             318]     Broadcast (F): osd name set to 'Broadcast'
DEBUG:   [             324]     InitHostCEC - vchiq_initialise succeeded
DEBUG:   [             325]     InitHostCEC - vchi_initialise succeeded
DEBUG:   [             326]     InitHostCEC - vchi_connect succeeded
DEBUG:   [             330]     logical address changed to Broadcast (f)
DEBUG:   [             333]     RegisterLogicalAddress - registering address e
DEBUG:   [             605]     logical address changed to Recorder 1 (1)
DEBUG:   [             605]     logical address changed to Free use (e)
DEBUG:   [             605]     Open - vc_cec initialised
NOTICE:  [             605]     connection opened
DEBUG:   [             607]     processor thread started
DEBUG:   [             608]     << Broadcast (F) -> TV (0): POLL
DEBUG:   [             611]     initiator 'Broadcast' is not supported by the CEC adapter. using 'Free use' instead
TRAFFIC: [             612]     << e0
DEBUG:   [             647]     >> POLL sent
DEBUG:   [             647]     TV (0): device status changed into 'present'
DEBUG:   [             647]     << requesting vendor ID of 'TV' (0)
TRAFFIC: [             647]     << e0:8c
DEBUG:   [            1858]     expected response not received (87: device vendor id)
TRAFFIC: [            1859]     << e0:8c
DEBUG:   [            3070]     expected response not received (87: device vendor id)
NOTICE:  [            3070]     registering new CEC client - v2.1.4
DEBUG:   [            3070]     detecting logical address for type 'recording device'
DEBUG:   [            3070]     trying logical address 'Recorder 1'
DEBUG:   [            3070]     << Recorder 1 (1) -> Recorder 1 (1): POLL
TRAFFIC: [            3071]     << 11
DEBUG:   [            3071]     UnregisterLogicalAddress - releasing previous logical address
DEBUG:   [            3072]     logical address changed to Broadcast (f)
DEBUG:   [            3073]     RegisterLogicalAddress - registering address 1
DEBUG:   [            3255]     logical address changed to Free use (e)
DEBUG:   [            3255]     logical address changed to Recorder 1 (1)
TRAFFIC: [            3255]     << 11
DEBUG:   [            3255]     >> POLL not sent
DEBUG:   [            3256]     using logical address 'Recorder 1'
DEBUG:   [            3256]     Recorder 1 (1): device status changed into 'handled by libCEC'
DEBUG:   [            3256]     Recorder 1 (1): power status changed from 'unknown' to 'on'
DEBUG:   [            3256]     Recorder 1 (1): vendor = Pulse Eight (001582)
DEBUG:   [            3256]     Recorder 1 (1): CEC version 1.4
DEBUG:   [            3256]     AllocateLogicalAddresses - device '0', type 'recording device', LA '1'
DEBUG:   [            3256]     Recorder 1 (1): osd name set to 'CECTester'
DEBUG:   [            3256]     Recorder 1 (1): menu language set to 'eng'
DEBUG:   [            3258]     GetPhysicalAddress - physical address = 3000
DEBUG:   [            3258]     AutodetectPhysicalAddress - autodetected physical address '3000'
DEBUG:   [            3260]     Recorder 1 (1): physical address changed from ffff to 3000
DEBUG:   [            3262]     << Recorder 1 (1) -> broadcast (F): physical adddress 3000
TRAFFIC: [            3263]     << 1f:84:30:00:01
NOTICE:  [            3415]     CEC client registered: libCEC version = 2.1.4, client version = 2.1.4, firmware version = 1, logical address(es) = Recorder 1 (1) , physical address: 3.0.0.0, host: armv6l-unknown-linux-gnueabihf, features: 'P8 USB' 'P8 USB detect' 'RPi', git revision: a560d24, compiled on: Sun Sep 14 17:49:41 UTC 2014 by pi@raspberrypi on Linux 3.12.28+ (armv6l)
DEBUG:   [            3415]     << Recorder 1 (1) -> TV (0): OSD name 'CECTester'
TRAFFIC: [            3415]     << 10:47:43:45:43:54:65:73:74:65:72
DEBUG:   [            3716]     << requesting power status of 'TV' (0)
TRAFFIC: [            3716]     << 10:8f
TRAFFIC: [            3868]     >> 01:8c
DEBUG:   [            3868]     >> TV (0) -> Recorder 1 (1): give device vendor id (8C)
DEBUG:   [            3871]     << Recorder 1 (1) -> TV (0): vendor id Pulse Eight (1582)
TRAFFIC: [            3873]     << 1f:87:00:15:82
TRAFFIC: [            4087]     >> 01:90:00
DEBUG:   [            4087]     >> TV (0) -> Recorder 1 (1): report power status (90)
DEBUG:   [            4088]     TV (0): power status changed from 'unknown' to 'on'
DEBUG:   [            4089]     expected response received (90: report power status)
DEBUG:   [            4091]     << requesting vendor ID of 'TV' (0)
TRAFFIC: [            4091]     << 10:8c
TRAFFIC: [            4323]     >> 0f:87:00:e0:91
DEBUG:   [            4323]     >> TV (0) -> Broadcast (F): device vendor id (87)
DEBUG:   [            4323]     TV (0): vendor = LG (00e091)
DEBUG:   [            4323]     << Recorder 1 (1) -> Broadcast (F): vendor id Pulse Eight (1582)
TRAFFIC: [            4323]     << 1f:87:00:15:82
DEBUG:   [            4474]     expected response received (87: device vendor id)
DEBUG:   [            4475]     replacing the command handler for device 'TV' (0)
DEBUG:   [            4478]     TV (0): CEC version 1.3a
DEBUG:   [            4479]     TV (0): menu language set to 'eng'
DEBUG:   [            4481]     Recorder 1 (1): vendor = LG (00e091)
DEBUG:   [            4485]     replacing the command handler for device 'Recorder 1' (1)
DEBUG:   [            4485]     Recorder 1 (1): CEC version 1.3a
NOTICE:  [            4487]     << putting 'TV' (0) in standby mode
TRAFFIC: [            4488]     << 10:36
DEBUG:   [            4552]     unregistering all CEC clients
NOTICE:  [            4555]     unregistering client: libCEC version = 2.1.4, client version = 2.1.4, firmware version = 1, logical address(es) = Recorder 1 (1) , physical address: 3.0.0.0, host: armv6l-unknown-linux-gnueabihf, features: 'P8 USB' 'P8 USB detect' 'RPi', git revision: a560d24, compiled on: Sun Sep 14 17:49:41 UTC 2014 by pi@raspberrypi on Linux 3.12.28+ (armv6l)
DEBUG:   [            4559]     Recorder 1 (1): power status changed from 'on' to 'unknown'
DEBUG:   [            4561]     Recorder 1 (1): vendor = Unknown (000000)
DEBUG:   [            4564]     Recorder 1 (1): CEC version unknown
DEBUG:   [            4565]     Recorder 1 (1): osd name set to 'Recorder 1'
DEBUG:   [            4567]     Recorder 1 (1): device status changed into 'unknown'
DEBUG:   [            4567]     unregistering all CEC clients
DEBUG:   [            4624]     UnregisterLogicalAddress - releasing previous logical address
DEBUG:   [            4630]     logical address changed to Broadcast (f)

而且什么也没发生。而且我只使用CLI,过了一段时间RPi就把电视放进了空白的屏幕保护程序,但是我不知道如何在我的命令下立即做到这一点。

yrefmtwq

yrefmtwq1#

LG电视(仅限电视)不支持CEC Standby命令,参见here,不知道是libcec实现还是电视的限制

irlmq6kh

irlmq6kh2#

使用此命令:

sudo apt-get update;
sudo apt-get install gcc;
sudo apt-get install autoconf;
sudo apt-get install libtool;
sudo apt-get install pkg-config;
sudo apt-get install libselinux1-dev;
sudo apt-get install liblockdev1-dev;
sudo apt-get install gawk;
sudo apt-get install g++;
sudo apt-get install c++;
sudo apt-get install libgudev-1.0-dev;
sudo apt-get install libudev-dev;

mkdir -p $HOME/distr/libcec; 
wget -P $HOME/distr/libcec https://github.com/Pulse-Eight/libcec/archive/master.zip;
unzip $HOME/distr/libcec/master.zip -d $HOME/distr/libcec/;
cd $HOME/distr/libcec/libcec-master ./bootstrap;"
./configure --with-rpi-include-path=/opt/vc/include --with-rpi-lib-path=/opt/vc/lib --enable-rpi;
make;
sudo make install;
sudo apt-get install cec-utils;

然后这个:

sudo apt-get update
sudo apt-get dist-upgrade
sudo rpi-update
sudo reboot
xggvc2p6

xggvc2p63#

这里有一些附加命令,也许有用...
待机:

echo "standby 0" | cec-client -s -d 1

通电:

echo "on 0" | cec-client -s -d 1

更改HDMI源:

HDMI 1: echo "tx 4F:82:10:00" | cec-client -s -d 1
HDMI 2: echo "tx 4F:82:20:00" | cec-client -s -d 1
HDMI 3: echo "tx 4F:82:30:00" | cec-client -s -d 1
HDMI 4: echo "tx 4F:82:40:00" | cec-client -s -d 1
h43kikqp

h43kikqp4#

采用WebOS的LG电视不支持CEC待机的硬件解决方案:https://github.com/ALFISYS/cec_lg_off

khbbv19g

khbbv19g5#

libCEC看起来没有什么问题。但是LG电视型号的HDMI-CEC实现可能只是忽略了待机命令。您应该使用其他HDMI-CEC兼容设备测试树莓派,以检查待机命令是否正常工作。

相关问题