开机后接HDMI黑屏/卡顿问题
hjmmc opened this issue · comments
现象:1.开机后通过HDMI(test via hdmi 1.4)接上(或开机前接上)显示器,进入到登录界面后很快变成黑屏,而且无论怎么开合盖子也无法激活屏幕。2.开机后接入HDMI,可以显示,但非常卡顿,再拔出时导致内屏黑屏,可能过30秒后才恢复。
可能的解决方法(开机后手动触发内屏熄灭):
1.开机后手动开合一次屏幕再接入HDMI线缆
2.换成HDMI2.0或1.2线缆?不确定HDMI线缆的版本对黑屏是否有影响,目前没有其它线缆测试。
3.使用触发角(Hot Corners),在系统设定某个触发角功能为「显示器置入睡眠」(Put Display to Sleep),进入系统后移动鼠标触发显示器睡眠,再接入HDMI
4.使用命令行代替触发角功能 Run shell pmset displaysleepnow
5.使用开机启动脚本 launchctl
Create file /Library/LaunchDaemons/com.magicbokk.displaysleepnow.sh
#!/bin/bash
sleep 3s
# sleep
pmset displaysleepnow
sleep 1s
# wake
caffeinate -u -t 1
Create file /Library/LaunchDaemons/com.magicbokk.displaysleepnow.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.magicbokk.displaysleepnow</string>
<key>ProgramArguments</key>
<array>
<string>/Library/LaunchDaemons/com.magicbokk.displaysleepnow.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
使用终端运行安装启动脚本,开机进入登录界面前脚本自动触发了内屏熄灭&点亮,之后再接入HDMI就正常了
cd /Library/LaunchDaemons/
# chmod
chmod +x com.magicbokk.displaysleepnow.sh
# load
sudo launchctl load -w com.magicbokk.displaysleepnow.plist
测试了两台显示器,一台的情况是开机接入正常,但拔出100%黑屏,另一台是开机接入黑屏。
测过了应该跟线无关,不过是 HDMI1.4 还是 HDMI2.0 的线都是一样,拔出黑屏
另外测过了打开DVMT 64M也是无法解决这样的情况的,补丁也试了很多,暂时是没能力修复了,只能用开机脚本曲线救国
太赞了!联想昭阳k43c-80 同样是i5 8250U,用了patch以后完美驱动HDMI,解决内屏黑屏的困扰。就是有点没搞清原理,是否可以简单解析一下 😄
<key>PciRoot(0x0)/Pci(0x2,0x0)</key> <dict> <key>AAPL,ig-platform-id</key> <data>AAAWWQ==</data> <key>complete-modeset-framebuffers</key> <data>AAAAAAAAAAE=</data> <key>force-online</key> <data>AQAAAA==</data> <key>force-online-framebuffers</key> <data>AAAAAAAAAAE=</data> <key>device-id</key> <data>FlkAAA==</data> <key>enable-hdmi20</key> <data>AQAAAA==</data> <key>framebuffer-con1-enable</key> <data>AQAAAA==</data> <key>framebuffer-con1-type</key> <data>AAgAAA==</data> <key>framebuffer-con2-enable</key> <data>AAAAAA==</data> <key>framebuffer-con2-index</key> <data>/////w==</data> <key>framebuffer-fbmem</key> <data>AACQAA==</data> <key>framebuffer-patch-enable</key> <data>AQAAAA==</data> <key>framebuffer-stolenmem</key> <data>AAAwAQ==</data> <key>framebuffer-unifiedmem</key> <data>AAAAgA==</data> </dict>
主要是加了这个参数 complete-modeset-framebuffers
,详情可以看 WhateverGreen 相关文档