forked from neroxps/neroxps.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
2021 lines (1765 loc) · 384 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Nero Blog</title>
<link href="/atom.xml" rel="self"/>
<link href="http://blog.neroxps.cn/"/>
<updated>2017-08-09T09:33:54.000Z</updated>
<id>http://blog.neroxps.cn/</id>
<author>
<name>Nero Hau</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>zabbix-agent 安装及升级</title>
<link href="http://blog.neroxps.cn/2017/07/15/Zabbix-agent-installation-Debian/"/>
<id>http://blog.neroxps.cn/2017/07/15/Zabbix-agent-installation-Debian/</id>
<published>2017-07-14T16:00:00.000Z</published>
<updated>2017-08-09T09:33:54.000Z</updated>
<content type="html"><![CDATA[<h2 id="安装-zabbix-agent-到-Debian"><a href="#安装-zabbix-agent-到-Debian" class="headerlink" title="安装 zabbix-agent 到 Debian"></a>安装 zabbix-agent 到 Debian</h2><blockquote>
<p>参考 <a href="https://www.zabbix.com/documentation/3.2/manual/installation/install_from_packages/agent_installation" target="_blank" rel="external">Zabbix Documentation 3.2</a></p>
</blockquote>
<h3 id="通过默认源安装-zabbix-agent"><a href="#通过默认源安装-zabbix-agent" class="headerlink" title="通过默认源安装 zabbix-agent"></a>通过默认源安装 zabbix-agent</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">sudo apt-get install zabbix-agent</div></pre></td></tr></table></figure>
<p>但是这样安装的 zabbix-agent 版本是比较老的版本</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">zabbix_agent -V</div><div class="line">Zabbix agent v2.2.7 (revision 50148) (24 October 2014)</div><div class="line">Compilation time: Feb 3 2017 17:23:53</div></pre></td></tr></table></figure>
<h3 id="通过-Zabbix-源安装新版本"><a href="#通过-Zabbix-源安装新版本" class="headerlink" title="通过 Zabbix 源安装新版本"></a>通过 Zabbix 源安装新版本</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line"># wget http://repo.zabbix.com/zabbix/3.2/debian/pool/main/z/zabbix-release/zabbix-release_3.2-1+jessie_all.deb</div><div class="line"># dpkg -i zabbix-release_3.2-1+jessie_all.deb</div><div class="line"># apt-get update</div><div class="line"># apt-get install zabbix-agent</div><div class="line"># zabbix_agentd -V</div><div class="line">zabbix_agentd (daemon) (Zabbix) 3.2.6</div><div class="line">Revision 67849 4 May 2017, compilation time: May 6 2017 15:59:40</div></pre></td></tr></table></figure>
<h2 id="升级-zabbix-agent-到官方新版本-2-2-7-升级到-3-2-6)"><a href="#升级-zabbix-agent-到官方新版本-2-2-7-升级到-3-2-6)" class="headerlink" title="升级 zabbix-agent 到官方新版本(2.2.7 升级到 3.2.6)"></a>升级 zabbix-agent 到官方新版本(2.2.7 升级到 3.2.6)</h2><p>如果是之前安装 zabbix-agent 是用系统默认源安装的话,版本比较久,那么可以通过上面方法安装最新版本。</p>
<blockquote>
<p>注:笔者的 zabbix-server 版本是3.2版本,要确定自己的 zabbix-agent 是否适用于 zabbix-server。</p>
</blockquote>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">$ wget http://repo.zabbix.com/zabbix/3.2/debian/pool/main/z/zabbix-release/zabbix-release_3.2-1+jessie_all.deb</div><div class="line">$ sudo dpkg -i zabbix-release_3.2-1+jessie_all.deb</div><div class="line">$ sudo apt-get update</div><div class="line">$ sudo apt-get install --only-upgrade zabbix-agent</div><div class="line"></div><div class="line">注意,这里更新的时候会问你选择如何处理已有的配置文件,这里可以选择 N,使用原来的配置文件。</div></pre></td></tr></table></figure>
<h3 id="遇到错误"><a href="#遇到错误" class="headerlink" title="遇到错误"></a>遇到错误</h3><p>安装到最后会报告安装失败,其实已经安装好了,但是因为 2.2 的配置文件引入的其他配置的目录路径是 /etc/zabbix/zabbix_agentd.conf.d,而 3.2是 /etc/zabbix/zabbix_agentd.d 故此会刷出报错日志如下:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">7月 15 14:49:22 gooderp-backup zabbix_agentd[22098]: zabbix_agentd [22098]: /etc/zabbix/zabbix_agentd.conf.d: [2] No such file or directory</div><div class="line">7月 15 14:49:22 gooderp-backup systemd[1]: zabbix-agent.service: control process exited, code=exited status=1</div><div class="line">7月 15 14:49:22 gooderp-backup systemd[1]: Failed to start Zabbix Agent.</div></pre></td></tr></table></figure>
<p>这个简单,只需要替换下配置文件的路径名称即可。</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">$ sudo sed -i "s/zabbix_agentd.conf.d/zabbix_agentd.d/g" /etc/zabbix/zabbix_agentd.conf</div><div class="line">$ sudo systemctl restart zabbix-agent</div></pre></td></tr></table></figure>
]]></content>
<summary type="html">
<h2 id="安装-zabbix-agent-到-Debian"><a href="#安装-zabbix-agent-到-Debian" class="headerlink" title="安装 zabbix-agent 到 Debian"></a>安装 zabbix-ag
</summary>
<category term="IT技术 Linux" scheme="http://blog.neroxps.cn/categories/IT%E6%8A%80%E6%9C%AF-Linux/"/>
<category term="Zabbix" scheme="http://blog.neroxps.cn/tags/Zabbix/"/>
</entry>
<entry>
<title>Zabbix 邮件警告</title>
<link href="http://blog.neroxps.cn/2017/07/13/Zabbix-SMTP/"/>
<id>http://blog.neroxps.cn/2017/07/13/Zabbix-SMTP/</id>
<published>2017-07-12T16:00:00.000Z</published>
<updated>2017-08-09T09:33:54.000Z</updated>
<content type="html"><![CDATA[<h1 id="触发器邮件警告"><a href="#触发器邮件警告" class="headerlink" title="触发器邮件警告"></a>触发器邮件警告</h1><p>Zabbix 默认的邮箱警告有个 SMTP HELO 的值,我一直不知道怎么填写,反正这个值一直报错,网上爬文一堆都是通过脚本来发邮件的。</p>
<h2 id="部署-sendEmail-环境"><a href="#部署-sendEmail-环境" class="headerlink" title="部署 sendEmail 环境"></a>部署 sendEmail 环境</h2><blockquote>
<p>参考文献1:<a href="http://www.jianshu.com/p/78ec2aba6824" target="_blank" rel="external">Zabbix通过stmp邮件报警</a></p>
<p>参考文献2:<a href="http://xiao987334176.blog.51cto.com/2202382/1768339" target="_blank" rel="external">zabbix 3.0.2邮件报警</a></p>
</blockquote>
<p>这里需要用到 sendEmail <a href="http://caspian.dotconf.net/menu/Software/SendEmail/" target="_blank" rel="external">下载地址</a>,它是基于 perl 写的一个脚本,如果用 SSL 加密的话需要依赖 perl 的 <strong>Net::SSLeay</strong> 和 <strong>IO::Socket::SSL</strong> 模块,debian 和 Ubuntu 的源都可以直接安装这个软件,另外安装 <code>libcrypt-ssleay-perl libio-socket-ssl-perl ca-certificates</code> 这三个包即可。</p>
<p>但是我查了下,zabbix/zabbix-server-mysql:latest 是使用 alpine 的,我测试的时候 sendEmail 官网下载的脚本会遇到 <code>invalid SSL_version</code> 的报错。Google 一番后据说要修改 <code>/usr/share/perl5/IO/Socket/SSL.pm</code> 这个依赖文件,但是我改了之后就会报 SSL 鉴定错误,故此不能这样做。</p>
<p>最终爬贴找到了这个帖子<strong><a href="https://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-mail/sendEmail/files/1.56-overzealous-version-check.patch?view=log" target="_blank" rel="external">1.56-overzealous-version-check.patch</a></strong></p>
<p>例子中是将 sendEmail 的 SSL_version 定义为 SSLv3,但是我使用的 QQ 邮箱和 Gmail 目前都在使用 TLSv1 协议,故此我需要将这个改成 TLSv1。</p>
<p>说回来我是 Docker 环境,故此我需要基于 zabbix/zabbix-server-mysql:latest 构建一个新的镜像。</p>
<h3 id="1-创建-Docker-构建文件夹"><a href="#1-创建-Docker-构建文件夹" class="headerlink" title="1. 创建 Docker 构建文件夹"></a>1. 创建 Docker 构建文件夹</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">mkdir ~/zabbix-server-mysql-sendEmail</div></pre></td></tr></table></figure>
<h3 id="2-创建-Dockerfile"><a href="#2-创建-Dockerfile" class="headerlink" title="2. 创建 Dockerfile"></a>2. 创建 Dockerfile</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div></pre></td><td class="code"><pre><div class="line">cat <<EOF | tee ~/zabbix-server-mysql-sendEmail/Dockerfile</div><div class="line">FROM zabbix/zabbix-server-mysql</div><div class="line">RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \</div><div class="line">apk add --no-cache perl-crypt-ssleay perl-io-socket-ssl ca-certificates tzdata && \</div><div class="line">wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz -P /tmp/ && \</div><div class="line">tar xzf /tmp/sendEmail-v1.56.tar.gz -C /tmp/ && \</div><div class="line">rm -f /tmp/sendEmail-v1.56.tar.gz && \</div><div class="line">sed -i "s/SSL_version => 'SSLv3 TLSv1'/SSL_version => 'TLSv1'/g" /tmp/sendEmail-v1.56/sendEmail && \</div><div class="line">mv /tmp/sendEmail-v1.56/sendEmail /usr/bin && \</div><div class="line">chmod +x /usr/bin/sendEmail && \</div><div class="line">rm -rf /tmp/* && \</div><div class="line">ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \</div><div class="line">echo "Asia/Shanghai" > /etc/timezone </div><div class="line"></div><div class="line">EXPOSE 10051/TCP 162/UDP</div><div class="line"></div><div class="line">WORKDIR /var/lib/zabbix</div><div class="line"></div><div class="line">ENTRYPOINT ["/bin/bash"]</div><div class="line"></div><div class="line">CMD ["/run_zabbix_component.sh", "server", "mysql"]</div><div class="line">EOF</div></pre></td></tr></table></figure>
<h3 id="3-构建镜像"><a href="#3-构建镜像" class="headerlink" title="3. 构建镜像"></a>3. 构建镜像</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">cd ~/zabbix-server-mysql-sendEmail</div><div class="line">docker build -t nero/zabbix-server-mysql:latest .</div></pre></td></tr></table></figure>
<h3 id="4-停止官方使用的镜像,启用新镜像"><a href="#4-停止官方使用的镜像,启用新镜像" class="headerlink" title="4. 停止官方使用的镜像,启用新镜像"></a>4. 停止官方使用的镜像,启用新镜像</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div></pre></td><td class="code"><pre><div class="line">docker rm -f zabbix-server #这里我之前启用镜像的时候使用的是别名</div><div class="line">docker run --name zabbix-server \</div><div class="line">--link zabbix-db:mysql-server \</div><div class="line">--restart=always \</div><div class="line">-e MYSQL_USER=zabbix \</div><div class="line">-e MYSQL_PASSWORD=zabbix \</div><div class="line">-e ZBX_IPMIPOLLERS=3 \</div><div class="line">-e ZBX_STARTVMWARECOLLECTORS=5 \</div><div class="line">-e ZBX_DEBUGLEVEL=3 \</div><div class="line">-v /home/nero/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \</div><div class="line">-v /home/nero/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \</div><div class="line">-p 10051:10051 \</div><div class="line">-d nero/zabbix-server-mysql</div></pre></td></tr></table></figure>
<h3 id="5-编写-sendEmail-的发信脚本"><a href="#5-编写-sendEmail-的发信脚本" class="headerlink" title="5. 编写 sendEmail 的发信脚本"></a>5. 编写 sendEmail 的发信脚本</h3><blockquote>
<p>参考自 <a href="http://www.jianshu.com/p/78ec2aba6824" target="_blank" rel="external">Zabbix通过stmp邮件报警</a></p>
</blockquote>
<p>我修改了下他的脚本,他脚本会自动转换字符编码,另外输出日志方便排查,但是日志不太详细,我给 sendEmail 加了 -v 参数。</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div></pre></td><td class="code"><pre><div class="line">#!/bin/bash</div><div class="line">SMTP_server='smtp.qq.com:587' # SMTP服务器,我用 QQ TLS 的端口。</div><div class="line">username='[email protected]' # 用户名</div><div class="line">password=' smtp_password' # 密码</div><div class="line">from_email_address='[email protected]' # 发件人Email地址</div><div class="line">to_email_address="$1" # 收件人Email地址,zabbix传入的第一个参数</div><div class="line">message_subject_utf8="$2" # 邮件标题,zabbix传入的第二个参数</div><div class="line">message_body_utf8="$3" # 邮件内容,zabbix传入的第三个参数</div><div class="line"></div><div class="line">echo "`date +"%F %T"` send to $to_email_address" >> /tmp/send.log</div><div class="line"></div><div class="line"># 转换邮件标题为GB2312,解决邮件标题含有中文,收到邮件显示乱码的问题。</div><div class="line">message_subject_gb2312=`iconv -t GB2312 -f UTF-8 << EOF</div><div class="line">$message_subject_utf8</div><div class="line">EOF`</div><div class="line">[ $? -eq 0 ] && message_subject="$message_subject_gb2312" || message_subject="$message_subject_utf8"</div><div class="line">bhnaqekboudsdcca</div><div class="line"># 转换邮件内容为GB2312</div><div class="line">message_body_gb2312=`iconv -t GB2312 -f UTF-8 << EOF</div><div class="line">$message_body_utf8</div><div class="line">EOF`</div><div class="line">[ $? -eq 0 ] && message_body="$message_body_gb2312" || message_body="$message_body_utf8"</div><div class="line"></div><div class="line"># 发送邮件</div><div class="line">sendEmail='/usr/bin/sendEmail'</div><div class="line">$sendEmail -s "$SMTP_server" -xu "$username" -xp "$password" -f "$from_email_address" -t "$to_email_address" -u "$message_subject" -m "$message_body" -o message-content-type=text -o message-charset=gb2312 -o tls=yes -v >> /tmp/send.log</div><div class="line"></div><div class="line">echo $? >> /tmp/send.log</div><div class="line">echo "zabbix 参数1 = $1" >> /tmp/send.log</div><div class="line">echo "zabbix 参数2 = $2" >> /tmp/send.log</div><div class="line">echo "zabbix 参数3 = $3" >> /tmp/send.log</div><div class="line">echo >> /tmp/send.log</div><div class="line">echo >> /tmp/send.log</div><div class="line">echo >> /tmp/send.log</div></pre></td></tr></table></figure>
<h2 id="Zabbix-设置邮件告警"><a href="#Zabbix-设置邮件告警" class="headerlink" title="Zabbix 设置邮件告警"></a>Zabbix 设置邮件告警</h2><blockquote>
<p>我这里的 Zabbix 版本是3.2版本,不同版本界面略有不同,据说2.0的版本不需要加脚本参数,3.0开始需要加脚本参数了。</p>
</blockquote>
<h3 id="1-创建报价媒介类型"><a href="#1-创建报价媒介类型" class="headerlink" title="1. 创建报价媒介类型"></a>1. 创建报价媒介类型</h3><p><img src="/2017/07/13/Zabbix-SMTP/zabbix-01.png" alt="zabbix-01"></p>
<h3 id="2-输入报警媒介类型参数"><a href="#2-输入报警媒介类型参数" class="headerlink" title="2. 输入报警媒介类型参数"></a>2. 输入报警媒介类型参数</h3><p><img src="/2017/07/13/Zabbix-SMTP/zabbix-02.png" alt="zabbix-02"></p>
<p>这里注意,脚本参数顺序不要错,否则会导致发信失败。</p>
<table>
<thead>
<tr>
<th>脚本参数</th>
<th>参数</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr>
<td>第一个参数</td>
<td>{ALERT.SENDTO}</td>
<td>目的邮箱地址</td>
</tr>
<tr>
<td>第二个参数</td>
<td>{ALERT.SUBJECT}</td>
<td>邮件主题</td>
</tr>
<tr>
<td>第三个参数</td>
<td>{ALERT.MESSAGE}</td>
<td>邮件内容</td>
</tr>
</tbody>
</table>
<h3 id="3-配置用户收信邮箱"><a href="#3-配置用户收信邮箱" class="headerlink" title="3. 配置用户收信邮箱"></a>3. 配置用户收信邮箱</h3><p><img src="/2017/07/13/Zabbix-SMTP/zabbix-03.png" alt="zabbix-03"></p>
<hr>
<p><img src="/2017/07/13/Zabbix-SMTP/zabbix-04.png" alt="zabbix-04"></p>
<hr>
<p><img src="/2017/07/13/Zabbix-SMTP/zabbix-05.png" alt="zabbix-05"></p>
<hr>
<p><img src="/2017/07/13/Zabbix-SMTP/zabbix-06.png" alt="zabbix-06"></p>
<h3 id="4-配置动作"><a href="#4-配置动作" class="headerlink" title="4. 配置动作"></a>4. 配置动作</h3><p>这里我建立一个触发器警告,当触发器条件为真的时候,就发出警告邮件。</p>
<p><img src="/2017/07/13/Zabbix-SMTP/zabbix-07.png" alt="zabbix-07"></p>
<p><strong>注意这里事件源选择触发器</strong></p>
<hr>
<p>按图片重复添加动作条件</p>
<p><img src="/2017/07/13/Zabbix-SMTP/zabbix-08.png" alt="zabbix-08"></p>
<hr>
<p><img src="/2017/07/13/Zabbix-SMTP/zabbix-09.png" alt="zabbix-09"></p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line">默认接收人:『服务器警报』 {HOST.NAME}:{ITEM.NAME}</div><div class="line"></div><div class="line">默认信息:</div><div class="line">告警主机: {HOSTNAME1}</div><div class="line">告警时间: {EVENT.DATE} {EVENT.TIME}</div><div class="line">告警等级: {TRIGGER.SEVERITY}</div><div class="line">告警信息: {TRIGGER.NAME}</div><div class="line">告警项目: {TRIGGER.KEY1}</div><div class="line">问题详情: {ITEM.NAME}: {ITEM.VALUE}</div><div class="line">当前状态: {TRIGGER.STATUS}: {ITEM.VALUE1}</div><div class="line">事件ID: {EVENT.ID}</div></pre></td></tr></table></figure>
<p>其余参数按照图片设置,目前还没理解透这里所有选项,这里就不班门弄斧。</p>
<hr>
<p><img src="/2017/07/13/Zabbix-SMTP/zabbix-10.png" alt="zabbix-10"></p>
<p>这里是触发器值为假后的操作,你可以自定义恢复公式,也可以按照原来的公式为假后发送邮件,告诉我们这个监控值正常了。</p>
<p>里面的内容除了<strong>默认接收人</strong>也就是邮件标题外,其余内容和上面的一样。</p>
<h4 id="调试邮件告警"><a href="#调试邮件告警" class="headerlink" title="调试邮件告警"></a>调试邮件告警</h4><p>监控邮件发送日志,就可以调试邮件的发送状态了。</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div></pre></td><td class="code"><pre><div class="line">docker exec -it zabbix-server tail -f /tmp/send.log</div><div class="line">2017-07-12 17:53:07 send to [email protected]</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: DEBUG => Connecting to smtp.qq.com:587</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: DEBUG => My IP address is: 172.17.0.3</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: SUCCESS => Received: 220 smtp.qq.com Esmtp QQ Mail Server</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: INFO => Sending: EHLO </div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: SUCCESS => Received: 250-smtp.qq.com, 250-PIPELINING, 250-SIZE 73400320, 250-STARTTLS, 250-AUTH LOGIN PLAIN, 250-AUTH=LOGIN, 250-MAILCOMPRESS, 250 8BITMIME</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: INFO => Sending: STARTTLS</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: SUCCESS => Received: 220 Ready to start TLS</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: DEBUG => TLS session initialized :)</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: INFO => Sending: EHLO </div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: SUCCESS => Received: 250-smtp.qq.com, 250-PIPELINING, 250-SIZE 73400320, 250-AUTH LOGIN PLAIN, 250-AUTH=LOGIN, 250-MAILCOMPRESS, 250 8BITMIME</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: DEBUG => SMTP-AUTH: Using LOGIN authentication method</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: INFO => Sending: AUTH LOGIN</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: SUCCESS => Received: 334 VXNlcm5hbWU6</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: INFO => Sending: </div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: SUCCESS => Received: 334 UGFzc3dvcmQ6</div><div class="line">Jul 12 17:53:07 1890ce4a57bf sendEmail[172]: INFO => Sending: </div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: SUCCESS => Received: 235 Authentication successful</div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: DEBUG => User authentication was successful (Method: LOGIN)</div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: INFO => Sending: MAIL FROM:<[email protected]></div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: SUCCESS => Received: 250 Ok</div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: INFO => Sending: RCPT TO:<[email protected]></div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: SUCCESS => Received: 250 Ok</div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: INFO => Sending: DATA</div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: SUCCESS => Received: 354 End data with <CR><LF>.<CR><LF></div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: INFO => Sending message body</div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: Setting content-type: text/plain</div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: SUCCESS => Received: 250 Ok: queued as</div><div class="line">Jul 12 17:53:08 1890ce4a57bf sendEmail[172]: Email was sent successfully! From: <[email protected]> To: <[email protected]> Subject: [『服务器警报恢复』 Gen8-ipmi:02-CPU] Server: [smtp.qq.com:587]</div><div class="line">0</div><div class="line">zabbix 参数1 = [email protected]</div><div class="line">zabbix 参数2 = 『服务器警报恢复』 Gen8-ipmi:02-CPU</div><div class="line">zabbix 参数3 = 告警主机: Gen8-ipmi</div><div class="line">告警时间: 2017.07.12 17:50:58</div><div class="line">告警等级: High</div><div class="line">告警信息: Gen8-ipmi CPU温度过高-test006</div><div class="line">告警项目: 02-CPU</div><div class="line">问题详情: 02-CPU: 40 ℃</div><div class="line">当前状态: OK: 40 ℃</div><div class="line">事件ID: 4858</div></pre></td></tr></table></figure>
]]></content>
<summary type="html">
<h1 id="触发器邮件警告"><a href="#触发器邮件警告" class="headerlink" title="触发器邮件警告"></a>触发器邮件警告</h1><p>Zabbix 默认的邮箱警告有个 SMTP HELO 的值,我一直不知道怎么填写,反正这个值一直报错
</summary>
<category term="IT技术 Linux" scheme="http://blog.neroxps.cn/categories/IT%E6%8A%80%E6%9C%AF-Linux/"/>
<category term="Zabbix" scheme="http://blog.neroxps.cn/tags/Zabbix/"/>
</entry>
<entry>
<title>使用 Docker 部署 Zabbix 3.2 记录</title>
<link href="http://blog.neroxps.cn/2017/07/01/Zabbix-Installation-Docker/"/>
<id>http://blog.neroxps.cn/2017/07/01/Zabbix-Installation-Docker/</id>
<published>2017-06-30T16:00:00.000Z</published>
<updated>2017-08-09T09:33:54.000Z</updated>
<content type="html"><![CDATA[<h1 id="Zabbix-搭建文档"><a href="#Zabbix-搭建文档" class="headerlink" title="Zabbix 搭建文档"></a>Zabbix 搭建文档</h1><h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>计划使用 docker 搭建 Zabbix 监控系统。</p>
<h2 id="安装-Docker"><a href="#安装-Docker" class="headerlink" title="安装 Docker"></a>安装 Docker</h2><p>参考 <a href="https://yeasy.gitbooks.io/docker_practice/content/install/ubuntu.html" target="_blank" rel="external">Ubuntu、Debian 系列安装 Docker</a></p>
<h2 id="部署-Mariadb-Server"><a href="#部署-Mariadb-Server" class="headerlink" title="部署 Mariadb-Server"></a>部署 Mariadb-Server</h2><h3 id="一、建立数据库本地目录"><a href="#一、建立数据库本地目录" class="headerlink" title="一、建立数据库本地目录"></a>一、建立数据库本地目录</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">mkdir -p ~/zabbix/database/mysql</div><div class="line">mkdir ~/zabbix/database/conf.d</div></pre></td></tr></table></figure>
<h3 id="二、运行-Mariadb-Server-Docker"><a href="#二、运行-Mariadb-Server-Docker" class="headerlink" title="二、运行 Mariadb-Server Docker"></a>二、运行 Mariadb-Server Docker</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">docker run --name zabbix-db \</div><div class="line">--restart=always \</div><div class="line">-e MYSQL_ROOT_PASSWORD=<span class="string">'mysql_root_password'</span> \</div><div class="line">-e MYSQL_DATABASE=zabbix \</div><div class="line">-e MYSQL_USER=zabbix \</div><div class="line">-e MYSQL_PASSWORD=zabbix \</div><div class="line">-v /home/nero/zabbix/database/mysql:/var/lib/mysql \</div><div class="line">-v /home/nero/zabbix/database/conf.d:/etc/mysql/conf.d \</div><div class="line">-d mariadb</div></pre></td></tr></table></figure>
<blockquote>
<p>这里会产生一个问题,由于默认的 mariadb 是使用<code>latin1</code>字符集来创建数据库,这时候我们在 Zabbix 录入中文字符的时候会导致出错,故此需要进入 mariadb-docker 内删除新建好的<code>zabbix</code>数据库,再使用<code>utf8</code>新建数据库。</p>
</blockquote>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">$ docker <span class="built_in">exec</span> -it zabbix-db mysql -uroot -p<span class="string">'mysql_root_password'</span></div><div class="line">MariaDB [(none)]> drop database zabbix;</div><div class="line">MariaDB [(none)]> create database zabbix default charset utf8;</div></pre></td></tr></table></figure>
<p>此时,数据库已经以 utf8 新建好了。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">MariaDB [(none)]> show create database zabbix;</div><div class="line">+----------+-----------------------------------------------------------------+</div><div class="line">| Database | Create Database |</div><div class="line">+----------+-----------------------------------------------------------------+</div><div class="line">| zabbix | CREATE DATABASE `zabbix` /*!40100 DEFAULT CHARACTER SET utf8 */ |</div><div class="line">+----------+-----------------------------------------------------------------+</div><div class="line">1 row <span class="keyword">in</span> <span class="built_in">set</span> (0.01 sec)</div><div class="line"></div><div class="line">MariaDB [(none)]>quit</div></pre></td></tr></table></figure>
<blockquote>
<p>2017年07月15日更新<br>怪自己看文档不仔细,今天扒 zabbix 的部署文档发现,我应该运行 mariadb 容器的时候就要定义数据库字符编码。<br><a href="https://www.zabbix.com/documentation/3.2/manual/installation/containers" target="_blank" rel="external">Zabbix Documentation 3.2-5 Installation from containers</a></p>
</blockquote>
<p><strong>注意,这里我是使用 mariadb,和 zabbix 官方文档使用是 mysql 的 docker,参数会有所不同。</strong></p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">docker run --name zabbix-db \</div><div class="line">--restart=always \</div><div class="line">-e MYSQL_ROOT_PASSWORD='mysql_root_password' \</div><div class="line">-e MYSQL_DATABASE=zabbix \</div><div class="line">-e MYSQL_USER=zabbix \</div><div class="line">-e MYSQL_PASSWORD=zabbix \</div><div class="line">-v /home/nero/zabbix/database/mysql:/var/lib/mysql \</div><div class="line">-v /home/nero/zabbix/database/conf.d:/etc/mysql/conf.d \</div><div class="line">-d mariadb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci</div></pre></td></tr></table></figure>
<h2 id="部署-Zabbix-Server-MySQL-Docker"><a href="#部署-Zabbix-Server-MySQL-Docker" class="headerlink" title="部署 Zabbix-Server-MySQL Docker"></a>部署 Zabbix-Server-MySQL Docker</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">docker run --name zabbix-server \</div><div class="line">--link zabbix-db:mysql-server \</div><div class="line">--restart=always \</div><div class="line">-e MYSQL_USER=zabbix \</div><div class="line">-e MYSQL_PASSWORD=zabbix \</div><div class="line">-p 10051:10051 \</div><div class="line">-d zabbix/zabbix-server-mysql</div></pre></td></tr></table></figure>
<h2 id="部署-Zabbix-WEB-nginx-MySQL-Docerk"><a href="#部署-Zabbix-WEB-nginx-MySQL-Docerk" class="headerlink" title="部署 Zabbix-WEB-nginx-MySQL Docerk"></a>部署 Zabbix-WEB-nginx-MySQL Docerk</h2><p>由于 Zabbix 图形字体中文显示会产生乱码,故此需要将中文字体放入 Zabbix 的 WEB 目录中,并修改一个 php 文件才可以修正中文乱码问题。</p>
<h3 id="一、下载官方-zabbix-web-nginx-mysql-镜像"><a href="#一、下载官方-zabbix-web-nginx-mysql-镜像" class="headerlink" title="一、下载官方 zabbix-web-nginx-mysql 镜像"></a>一、下载官方 zabbix-web-nginx-mysql 镜像</h3><p><code>docker pull zabbix-web-nginx-mysql</code></p>
<h3 id="二、上传中文字体-simhei-ttf(本例使用黑体字体)"><a href="#二、上传中文字体-simhei-ttf(本例使用黑体字体)" class="headerlink" title="二、上传中文字体 simhei.ttf(本例使用黑体字体)"></a>二、上传中文字体 simhei.ttf(本例使用黑体字体)</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">mkdir ~/zabbix-web-docker-cn</div><div class="line">rz <span class="comment">#使用 rz 命令传输文件,如何传输本文档不体现</span></div></pre></td></tr></table></figure>
<h3 id="三、编写-Dockerfile-文件"><a href="#三、编写-Dockerfile-文件" class="headerlink" title="三、编写 Dockerfile 文件"></a>三、编写 Dockerfile 文件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">cat <<EOF | tee ~/zabbix-web-docker-cn/Dockerfile</div><div class="line">FROM zabbix/zabbix-web-nginx-mysql</div><div class="line">COPY simhei.ttf /usr/share/zabbix/fonts</div><div class="line">EXPOSE 80/TCP 443/TCP</div><div class="line">WORKDIR /usr/share/zabbix</div><div class="line">RUN sed -i <span class="string">'s/graphfont/simhei/g'</span> ./include/defines.inc.php</div><div class="line">VOLUME [<span class="string">"/etc/ssl/nginx"</span>]</div><div class="line">CMD [<span class="string">"/run_zabbix_component.sh"</span>, <span class="string">"frontend"</span>, <span class="string">"mysql"</span>, <span class="string">"nginx"</span>]</div><div class="line">EOF</div></pre></td></tr></table></figure>
<h3 id="四、构建镜像"><a href="#四、构建镜像" class="headerlink" title="四、构建镜像"></a>四、构建镜像</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div></pre></td><td class="code"><pre><div class="line">$ docker build -t nero/zabbix-web-nginx-mysql .</div><div class="line"></div><div class="line">Sending build context to Docker daemon 9.755MB</div><div class="line">Step 1/7 : FROM zabbix/zabbix-web-nginx-mysql</div><div class="line"> ---- 256dc87663d0</div><div class="line">Step 2/7 : COPY simhei.ttf /usr/share/zabbix/fonts</div><div class="line"> ---- 5743f1ab270b</div><div class="line">Removing intermediate container 78381e68fbbe</div><div class="line">Step 3/7 : EXPOSE 80/TCP 443/TCP</div><div class="line"> ---- Running <span class="keyword">in</span> 0c6786e828fc</div><div class="line"> ---- d24d892858a6</div><div class="line">Removing intermediate container 0c6786e828fc</div><div class="line">Step 4/7 : WORKDIR /usr/share/zabbix</div><div class="line"> ---- dc7c79f00b1c</div><div class="line">Removing intermediate container e6975c59dbc8</div><div class="line">Step 5/7 : RUN sed -i <span class="string">'s/graphfont/simhei/g'</span> ./include/defines.inc.php</div><div class="line"> ---- Running <span class="keyword">in</span> 27e5405d3ca7</div><div class="line"> ---- 6ca4c53d4b51</div><div class="line">Removing intermediate container 27e5405d3ca7</div><div class="line">Step 6/7 : VOLUME /etc/ssl/nginx</div><div class="line"> ---- Running <span class="keyword">in</span> 8f28060ed68e</div><div class="line"> ---- 2b4307bc9c9a</div><div class="line">Removing intermediate container 8f28060ed68e</div><div class="line">Step 7/7 : CMD /run_zabbix_component.sh frontend mysql nginx</div><div class="line"> ---- Running <span class="keyword">in</span> 184feb09f237</div><div class="line"> ---- b6da55ae29b6</div><div class="line">Removing intermediate container 184feb09f237</div><div class="line">Successfully built b6da55ae29b6</div><div class="line">Successfully tagged nero/zabbix-web-nginx-mysql:latest</div></pre></td></tr></table></figure>
<h3 id="五、运行镜像"><a href="#五、运行镜像" class="headerlink" title="五、运行镜像"></a>五、运行镜像</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line">docker run --name zabbix-web \</div><div class="line">--link zabbix-db:mysql-server \</div><div class="line">--link zabbix-server:zabbix-server \</div><div class="line">-e MYSQL_USER=zabbix \</div><div class="line">-e MYSQL_PASSWORD=zabbix \</div><div class="line">-e PHP_TZ=<span class="string">'Asia/Hong_Kong'</span> \</div><div class="line">-e ZBX_SERVER_NAME=<span class="string">'Rslnc monit Server'</span> \</div><div class="line">-p 80:80 \</div><div class="line">--restart=always \</div><div class="line">-d nero/zabbix-web-nginx-mysql</div></pre></td></tr></table></figure>
<h2 id="遇到的坑"><a href="#遇到的坑" class="headerlink" title="遇到的坑"></a>遇到的坑</h2><h3 id="数据库编码格式导致中文输入字符无法保存"><a href="#数据库编码格式导致中文输入字符无法保存" class="headerlink" title="数据库编码格式导致中文输入字符无法保存"></a>数据库编码格式导致中文输入字符无法保存</h3><p>由于之前使用的 docker 创建的 zabbix 数据库默认是以<code>latin1</code>字符编码创建的,故此在问题输入『消息』的时候会报字符编码错误。</p>
<p>那么数据库里面已经有原始数据存在,所以我需要将数据导出,再将数据转换成<code>utf8</code>编码。</p>
<blockquote>
<p>参考:# <a href="http://www.cnblogs.com/iloveyoucc/p/4763244.html" target="_blank" rel="external">MySQL数据库从GBK转换到UTF-8最简单解决方案(也适用于其它编码转换)</a></p>
</blockquote>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line">$ docker <span class="built_in">exec</span> -it zabbix-db bash</div><div class="line"><span class="comment"># mysqldump -d -u root -p'mysql_root_password' zabbix > /etc/mysql/conf.d/zabbix.sql</span></div><div class="line"><span class="comment"># mysqldump --default-character-set=utf8 -t -u root -p'mysql_root_password' zabbix > /etc/mysql/conf.d/zabbix-data.sql</span></div><div class="line"><span class="comment"># sed -i 's/latin1/utf8/g' /etc/mysql/conf.d/zabbix.sql</span></div><div class="line"><span class="comment"># mysql -uroot -p'mysql_root_password'</span></div><div class="line">MariaDB [(none)]> drop database zabbix;</div><div class="line">MariaDB [(none)]> create database zabbix default charset utf8;</div><div class="line">MariaDB [(none)]> use zabbix;</div><div class="line">MariaDB [zabbix]> <span class="built_in">source</span> /etc/mysql/conf.d/zabbix.sql</div><div class="line">MariaDB [zabbix]> <span class="built_in">source</span> /etc/mysql/conf.d/zabbix-data.sql</div><div class="line">MariaDB [zabbix]> quit</div><div class="line"><span class="comment"># exit</span></div></pre></td></tr></table></figure>
]]></content>
<summary type="html">
<h1 id="Zabbix-搭建文档"><a href="#Zabbix-搭建文档" class="headerlink" title="Zabbix 搭建文档"></a>Zabbix 搭建文档</h1><h2 id="概述"><a href="#概述" class="head
</summary>
<category term="IT技术 Linux" scheme="http://blog.neroxps.cn/categories/IT%E6%8A%80%E6%9C%AF-Linux/"/>
<category term="Zabbix" scheme="http://blog.neroxps.cn/tags/Zabbix/"/>
</entry>
<entry>
<title>记 GoodERP 部署</title>
<link href="http://blog.neroxps.cn/2017/06/15/GoodERP-Setup-Debian-8/"/>
<id>http://blog.neroxps.cn/2017/06/15/GoodERP-Setup-Debian-8/</id>
<published>2017-06-14T16:00:00.000Z</published>
<updated>2017-08-09T09:33:54.000Z</updated>
<content type="html"><![CDATA[<h1 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h1><ul>
<li><a href="www.gooderp.org">GoodERP 官方网址</a></li>
<li><a href="https://github.com/osbzr/gooderp_addons" target="_blank" rel="external">GoodERP GitHub</a> </li>
<li><a href="https://github.com/osbzr/base" target="_blank" rel="external">GoodERP 核心基于 Odoo 项目</a></li>
<li><a href="http://best.gooderp.org/" target="_blank" rel="external">GoodERP 论坛</a></li>
</ul>
<h1 id="部署环境"><a href="#部署环境" class="headerlink" title="部署环境"></a>部署环境</h1><ul>
<li>系统:Debian 8 最小化安装</li>
<li>内存:4G </li>
<li>硬盘:40G </li>
</ul>
<blockquote>
<p>参考官方论坛:<a href="http://best.gooderp.org/d/7" target="_blank" rel="external">Debian\ubuntu上源码安装GoodERP</a></p>
</blockquote>
<h2 id="GoodERP-需要准备"><a href="#GoodERP-需要准备" class="headerlink" title="GoodERP 需要准备"></a>GoodERP 需要准备</h2><p>由于 GoodERP 是基于 Odoo 做的二次开发,故此可以参考 Odoo 的源码搭建文档。</p>
<ul>
<li><strong>Python 2.7</strong></li>
<li><strong>PostgreSQL</strong></li>
<li><strong>Nodejs</strong></li>
</ul>
<h3 id="切换国内163源"><a href="#切换国内163源" class="headerlink" title="切换国内163源"></a>切换国内163源</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line">cat <<EOF | sudo tee /etc/apt/sources.list</div><div class="line">deb http://mirrors.163.com/debian/ jessie main non-free contrib</div><div class="line">deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib</div><div class="line">deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib</div><div class="line">deb-src http://mirrors.163.com/debian/ jessie main non-free contrib</div><div class="line">deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib</div><div class="line">deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib</div><div class="line">deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib</div><div class="line">deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib</div><div class="line">EOF</div><div class="line">sudo apt update && sudo apt -y upgrade</div></pre></td></tr></table></figure>
<h3 id="安装必要的软件"><a href="#安装必要的软件" class="headerlink" title="安装必要的软件"></a>安装必要的软件</h3><blockquote>
<p><strong>注意:由于使用了 nodesource.com 的安装脚本,建议搭建翻墙环境运行以下命令</strong></p>
</blockquote>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line">sudo apt install -y curl wget git vim unzip python python-setuptools\</div><div class="line">&& curl -sL https://bootstrap.pypa.io/get-pip.py | sudo -E python - \</div><div class="line">&& curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - \</div><div class="line">&& sudo apt-get install -y nodejs \</div><div class="line">&& sudo npm config set registry https://registry.npm.taobao.org \</div><div class="line">&& sudo npm install -g less \</div><div class="line">&& sudo apt-get -y build-dep python-lxml \</div><div class="line">&& sudo apt-get -y install libldap2-dev libsasl2-dev \</div><div class="line">&& curl -o wkhtmltox.deb -SL http://nightly.odoo.com/extra/wkhtmltox-0.12.1.2_linux-jessie-amd64.deb \</div><div class="line">&& echo '40e8b906de658a2221b15e4e8cd82565a47d7ee8 wkhtmltox.deb' | sha1sum -c - \</div><div class="line">&& sudo dpkg --force-depends -i wkhtmltox.deb \</div><div class="line">&& sudo apt-get -y install -f --no-install-recommends</div></pre></td></tr></table></figure>
<h1 id="PostgreSQL-安装"><a href="#PostgreSQL-安装" class="headerlink" title="PostgreSQL 安装"></a>PostgreSQL 安装</h1><h2 id="通过-apt-get-安装-PostgreSQL"><a href="#通过-apt-get-安装-PostgreSQL" class="headerlink" title="通过 apt-get 安装 PostgreSQL"></a>通过 apt-get 安装 PostgreSQL</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">sudo apt-get install -y postgresql postgresql-server-dev-9.4</div></pre></td></tr></table></figure>
<h2 id="配置-PostgreSQL"><a href="#配置-PostgreSQL" class="headerlink" title="配置 PostgreSQL"></a>配置 PostgreSQL</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">sudo -u postgres createuser --createdb --no-createrole --no-superuser --pwprompt good #创建数据库用户good,输入两次密码good</div></pre></td></tr></table></figure>
<h1 id="GoodERP-安装"><a href="#GoodERP-安装" class="headerlink" title="GoodERP 安装"></a>GoodERP 安装</h1><h2 id="步骤1:新建-good-用户"><a href="#步骤1:新建-good-用户" class="headerlink" title="步骤1:新建 good 用户"></a>步骤1:新建 good 用户</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">sudo adduser good</div><div class="line">sudo su good</div><div class="line">cd ~</div></pre></td></tr></table></figure>
<h2 id="步骤2:从-Github-中下载-GoodERP-源代码"><a href="#步骤2:从-Github-中下载-GoodERP-源代码" class="headerlink" title="步骤2:从 Github 中下载 GoodERP 源代码"></a>步骤2:从 Github 中下载 GoodERP 源代码</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">git clone http://github.com/osbzr/gooderp_addons </div><div class="line">git clone http://github.com/osbzr/base</div><div class="line">exit</div></pre></td></tr></table></figure>
<h2 id="步骤3:修改-pip-源为国内源(豆瓣)"><a href="#步骤3:修改-pip-源为国内源(豆瓣)" class="headerlink" title="步骤3:修改 pip 源为国内源(豆瓣)"></a>步骤3:修改 pip 源为国内源(豆瓣)</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">sudo mkdir ~/.pip</div><div class="line">cat <<EOF | sudo tee ~/.pip/pip.conf</div><div class="line">[global]</div><div class="line">index-url = https://pypi.douban.com/simple</div><div class="line">EOF</div></pre></td></tr></table></figure>
<h2 id="步骤4:使用-pip-安装-GoodERP-的-Python-模块(这里的过程会很漫长)"><a href="#步骤4:使用-pip-安装-GoodERP-的-Python-模块(这里的过程会很漫长)" class="headerlink" title="步骤4:使用 pip 安装 GoodERP 的 Python 模块(这里的过程会很漫长)"></a>步骤4:使用 pip 安装 GoodERP 的 Python 模块(这里的过程会很漫长)</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">sudo pip install -r base/requirements.txt -i https://pypi.douban.com/simple \</div><div class="line">&& sudo pip install simplejson httplib2 -i https://pypi.douban.com/simple</div></pre></td></tr></table></figure>
<h1 id="配置-GoodERP"><a href="#配置-GoodERP" class="headerlink" title="配置 GoodERP"></a>配置 GoodERP</h1><h2 id="编辑-gooderp-conf"><a href="#编辑-gooderp-conf" class="headerlink" title="编辑 ~/gooderp.conf"></a>编辑 ~/gooderp.conf</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">cat <<EOF | tee ~/gooderp.conf</div><div class="line">[options]</div><div class="line">db_user = good</div><div class="line">db_password = good</div><div class="line">addons_path = /home/good/gooderp_addons</div><div class="line">logfile = /home/good/gooderp.log</div><div class="line">EOF</div></pre></td></tr></table></figure>
<h2 id="开机启动"><a href="#开机启动" class="headerlink" title="开机启动"></a>开机启动</h2><h3 id="1-创建服务文件"><a href="#1-创建服务文件" class="headerlink" title="1. 创建服务文件"></a>1. 创建服务文件</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div></pre></td><td class="code"><pre><div class="line">cat <<EOF | sudo tee /etc/systemd/system/gooderp.service </div><div class="line">[Unit]</div><div class="line">Description=GoodERP</div><div class="line">Documentation=http://www.gooderp.org/</div><div class="line">After=network.target postgresql.service</div><div class="line"></div><div class="line">[Service]</div><div class="line"># Ubuntu/Debian convention:</div><div class="line">Type=simple</div><div class="line">User=good</div><div class="line">ExecStart=/usr/bin/python /home/good/base/odoo-bin -c /home/good/gooderp.conf</div><div class="line"></div><div class="line">[Install]</div><div class="line">WantedBy=multi-user.target</div><div class="line">EOF</div></pre></td></tr></table></figure>
<h3 id="2-让配置文件生效"><a href="#2-让配置文件生效" class="headerlink" title="2. 让配置文件生效"></a>2. 让配置文件生效</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">sudo systemctl daemon-reload</div></pre></td></tr></table></figure>
<h3 id="3-设置开机启动"><a href="#3-设置开机启动" class="headerlink" title="3.设置开机启动"></a>3.设置开机启动</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">sudo systemctl enable gooderp.service</div><div class="line">sudo systemctl enable postgresql.service</div><div class="line">sudo systemctl start gooderp.service</div></pre></td></tr></table></figure>
]]></content>
<summary type="html">
<h1 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h1><ul>
<li><a href="www.gooderp.org">GoodERP 官方网址</a></li>
<li><a href="htt
</summary>
<category term="Linux" scheme="http://blog.neroxps.cn/categories/Linux/"/>
<category term="ERP" scheme="http://blog.neroxps.cn/tags/ERP/"/>
<category term="Linux" scheme="http://blog.neroxps.cn/tags/Linux/"/>
<category term="GoodERP" scheme="http://blog.neroxps.cn/tags/GoodERP/"/>
<category term="Odoo" scheme="http://blog.neroxps.cn/tags/Odoo/"/>
</entry>
<entry>
<title>给 Seafile 部署 onlyoffice</title>
<link href="http://blog.neroxps.cn/2017/05/27/%E7%BB%99_Seafile_%E9%83%A8%E7%BD%B2_onlyoffice/"/>
<id>http://blog.neroxps.cn/2017/05/27/给_Seafile_部署_onlyoffice/</id>
<published>2017-05-26T16:00:00.000Z</published>
<updated>2017-08-09T09:33:54.000Z</updated>
<content type="html"><![CDATA[<h3 id="安装-Docker"><a href="#安装-Docker" class="headerlink" title="安装 Docker"></a>安装 Docker</h3><blockquote>
<p>参考 <a href="https://www.gitbook.com/book/yeasy/docker_practice/details" target="_blank" rel="external">《Docker 从入门到实践》</a></p>
</blockquote>
<p>我是在 Centos 7下搭建 Seafile,这里使用阿里云的 Centos 7 Docker 安装脚本。</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -</div></pre></td></tr></table></figure>
<h3 id="给-Docker-添加加速器"><a href="#给-Docker-添加加速器" class="headerlink" title="给 Docker 添加加速器"></a>给 Docker 添加加速器</h3><p>因为 Docker 的镜像服务器是在国外,所以我们给 Docker 添加国内镜像加速器,这里我使用阿里云的镜像加速器,如何申请阿里云的镜像加速器请自行百度。</p>
<p>编辑 /usr/lib/systemd/system/docker.service 找到 <code>ExecStart=/usr/bin/dockerd</code> 改成如下配置</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">ExecStart=/usr/bin/dockerd --registry-mirror=https://xxxxxxxx.mirror.aliyuncs.com</div></pre></td></tr></table></figure>
<p><strong>注:–registry-mirror= 后的网址请修改成阿里云申请的加速器地址</strong></p>
<p>修改后重载 systemd 配置、启动 Docker、设置 Docker 为开机自启动。</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">systemctl daemon-reload</div><div class="line">systemctl start docker</div><div class="line">systemctl enable docker</div></pre></td></tr></table></figure>
<h3 id="部署-OnlyOffice-documentserver"><a href="#部署-OnlyOffice-documentserver" class="headerlink" title="部署 OnlyOffice-documentserver"></a>部署 OnlyOffice-documentserver</h3><ul>
<li>构建 OnlyOffice-documentserver 镜像</li>
</ul>
<p>这里,你有两个选择</p>
<ol>
<li>部署官方的 onlyoffice Docker 镜像,但因为官方的 Docker 镜像里没有中文字体,故此显示中文字体上会出现各种异常。</li>
<li>我基于官方的 Docker 镜像制作了一个 Dockerfile <a href="https://github.com/neroxps/Docker-Only-Office-Chinese-font" target="_blank" rel="external">项目地址</a>,只要利用这个 Dockerfile 构建镜像即可。</li>
</ol>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">git clone https://github.com/neroxps/Docker-Only-Office-Chinese-font.git</div><div class="line">cd Docker-Only-Office-Chinese-font</div><div class="line">docker build -t onlyoffice/chinese .</div></pre></td></tr></table></figure>
<blockquote>
<p>winfont 目录下是 windows 下的中文字体,如果你有其他字体需要,也可以将字体上传到这个目录里面,再构建镜像。</p>
</blockquote>
<p>构建完毕后查看下我们现在的镜像</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">[root@seafile-server Docker-Only-Office-Chinese-font]# docker images</div><div class="line">REPOSITORY TAG IMAGE ID CREATED SIZE</div><div class="line">onlyoffice/chinese latest 5065553b1240 About a minute ago 1.68GB</div><div class="line">onlyoffice/documentserver latest f5ff5f9ec0c4 2 weeks ago 1.41GB</div></pre></td></tr></table></figure>
<p>onlyoffice 的 documentserver 镜像是提供在线编辑服务的,镜像内已包含了 nginx 服务器,支持 80 端口和 443 端口,如果有合法证书,我们可以使用 https 连接。</p>
<blockquote>
<p>onlyoffice-documentserver Docker 使用方法参考 <a href="https://github.com/ONLYOFFICE/Docker-DocumentServer" target="_blank" rel="external">Docker-DocumentServer</a></p>
</blockquote>
<ul>
<li>将证书复制到 onlyoffice 证书目录路径</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">#假设当前目录在证书目录下</div><div class="line">mkdir -p /app/onlyoffice/DocumentServer/data/certs</div><div class="line">cp fullchain1.pem /app/onlyoffice/DocumentServer/data/certs/onlyoffice.crt</div><div class="line">cp privkey1.pem /app/onlyoffice/DocumentServer/data/certs/onlyoffice.key</div><div class="line">openssl dhparam -out /app/onlyoffice/DocumentServer/data/certs/dhparam.pem 2048</div></pre></td></tr></table></figure>
<ul>
<li>生成 onlyoffice 日志目录</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">mkdir -p /app/onlyoffice/DocumentServer/logs</div></pre></td></tr></table></figure>
<h3 id="运行-OnlyOffice-documentserver"><a href="#运行-OnlyOffice-documentserver" class="headerlink" title="运行 OnlyOffice-documentserver"></a>运行 OnlyOffice-documentserver</h3><p>完成部署后我们就可以运行 OnlyOffice-documentserver 了。</p>
<p>由于我的 Seafile 是用 nginx 部署了 https,443端口已被占用了,大家如果公网 ip 多可以忽略,我是部署在内网,公网是 ADSL,故此只有一个公网 ip,所以 OnlyOffice-documentserver 不能使用 443 端口了。</p>
<ul>
<li>使用 https</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">docker run -itd -p 7443:443 -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \</div><div class="line">-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \</div><div class="line">--restart=always \</div><div class="line">--name office onlyoffice/chinese</div></pre></td></tr></table></figure>
<ul>
<li>使用 http</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">docker run -itd -p 780:80 -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \</div><div class="line">-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \</div><div class="line">--restart=always \</div><div class="line">--name office onlyoffice/chinese</div></pre></td></tr></table></figure>
<p>这时候我们可以运行 <code>docker logs office</code> 来观察运行情况。</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line">[root@seafile-server certs]# docker logs office</div><div class="line">guest</div><div class="line"> * Starting PostgreSQL 9.3 database server [ OK ] </div><div class="line"> * Starting message broker rabbitmq-server [ OK ] </div><div class="line">Starting redis-server: redis-server.</div><div class="line">Starting supervisor: supervisord.</div><div class="line">Generating AllFonts.js, please wait...Done</div><div class="line">onlyoffice-documentserver:docservice: stopped</div><div class="line">onlyoffice-documentserver:docservice: started</div><div class="line">onlyoffice-documentserver:converter: stopped</div><div class="line">onlyoffice-documentserver:converter: started</div></pre></td></tr></table></figure>
<p>通过 web 访问 <a href="https://demo.domain.com:7443" target="_blank" rel="external">https://demo.domain.com:7443</a> 可以看到 『Document Server is running』表明服务已经正常运行了。</p>
<h3 id="配置-Seafile-6-1-0,让其使用-onlyoffice"><a href="#配置-Seafile-6-1-0,让其使用-onlyoffice" class="headerlink" title="配置 Seafile 6.1.0,让其使用 onlyoffice"></a>配置 Seafile 6.1.0,让其使用 onlyoffice</h3><blockquote>
<p>参考 <a href="https://manual.seafile.com/deploy/only_office.html" target="_blank" rel="external">Seafile Manual/Only Office</a></p>
</blockquote>
<ul>
<li>编辑 seahub_settings.py 加入下方配置</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line"># Enable Only Office</div><div class="line">ENABLE_ONLYOFFICE = True</div><div class="line">VERIFY_ONLYOFFICE_CERTIFICATE = True</div><div class="line">ONLYOFFICE_APIJS_URL = 'https://demo.domain.com:7443/web-apps/apps/api/documents/api.js'</div><div class="line">ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')</div></pre></td></tr></table></figure>
<p><strong>注1:其中 <code>VERIFY_ONLYOFFICE_CERTIFICATE</code> 选项如果 onlyoffice 使用了 https 的话可以选择更改为 True 提高安全性,如果是使用 http 协议则改为 False</strong></p>
<p><strong>注2:如果没使用 memcached 的话,还需要执行 <code>rm /tmp/seahub_cached/</code>清空缓存</strong></p>
<ul>
<li>重启 seahub 使得配置生效</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">#假设当前在 seafile-server-latest 目录下</div><div class="line">rm -f ../conf/seahub_settings.pyc</div><div class="line">./seahub.sh restart-fastcgi</div></pre></td></tr></table></figure>
<p>尽情享受吧!</p>
<h3 id="使用体会"><a href="#使用体会" class="headerlink" title="使用体会"></a>使用体会</h3><p>onlyoffice 还是不错的,加载速度快,界面友善,我与同事测试过,多人同时编辑一个文件的时候毫无问题。</p>
<p>但是它目前缺点也十分明显,界面没有中文语言,对中文支持也不好,例如我们在 word 里面的字体叫『等线』,但是 onlyoffice 里面叫 『DengXian』,有时候它并不能识别,故此会识别成默认英文字体,导致一堆口口。</p>
<p>据说 Seafile 在端午节后会着重优化 onlyoffice 的体验,我们期待吧。</p>
]]></content>
<summary type="html">
<h3 id="安装-Docker"><a href="#安装-Docker" class="headerlink" title="安装 Docker"></a>安装 Docker</h3><blockquote>
<p>参考 <a href="https://www.gitbo
</summary>
<category term="Seafile" scheme="http://blog.neroxps.cn/categories/Seafile/"/>
<category term="seafile" scheme="http://blog.neroxps.cn/tags/seafile/"/>
<category term="onlyoffice" scheme="http://blog.neroxps.cn/tags/onlyoffice/"/>
</entry>
<entry>
<title>最近小记(2017年04月18日)</title>
<link href="http://blog.neroxps.cn/2017/04/18/2017-04-18-blog/"/>
<id>http://blog.neroxps.cn/2017/04/18/2017-04-18-blog/</id>
<published>2017-04-17T16:00:00.000Z</published>
<updated>2017-08-09T09:33:54.000Z</updated>
<content type="html"><![CDATA[<p>开年至今,一直非常忙碌,过年前后将老婆公司送的华硕 VM510LI 装成黑苹果,并逐步完善了。</p>
<p>但是好景不长,更新 macOS 10.12.4 正式版后睡眠唤醒屏幕无显示,仅有背光。郁闷了我很久,该情况在10.12.3也出现,后来更换显卡 ig 解决的,现在又出现,我将情况发到 tonymacx86 请教 RehabMan 大神(<a href="https://www.tonymacx86.com/threads/macos10-12-4-wake-up-black-screen-only-backlight.218828/" target="_blank" rel="external">macOS10.12.4 Wake up black screen(Only backlight)</a>),谁知道大神给我说,我的 hotpatch 太复杂了,他也没空调试,让我使用静态方式来修改 ACPI。</p>
<p>只是最近工作都比较多,屁事一堆,今天终于比较有空,继续研究下怎么修复这个问题。(然而既然有空搞,为何浪费时间来写这篇废话呢?xD)</p>
]]></content>
<summary type="html">
<p>开年至今,一直非常忙碌,过年前后将老婆公司送的华硕 VM510LI 装成黑苹果,并逐步完善了。</p>
<p>但是好景不长,更新 macOS 10.12.4 正式版后睡眠唤醒屏幕无显示,仅有背光。郁闷了我很久,该情况在10.12.3也出现,后来更换显卡 ig 解决的,现在又
</summary>
<category term="日记" scheme="http://blog.neroxps.cn/categories/%E6%97%A5%E8%AE%B0/"/>
<category term="日记" scheme="http://blog.neroxps.cn/tags/%E6%97%A5%E8%AE%B0/"/>
</entry>
<entry>
<title>使二合一声卡耳机麦克风生效整理</title>
<link href="http://blog.neroxps.cn/2017/03/13/Combo-Audio-Ext-Mic/"/>
<id>http://blog.neroxps.cn/2017/03/13/Combo-Audio-Ext-Mic/</id>
<published>2017-03-12T16:00:00.000Z</published>
<updated>2017-08-09T09:33:55.000Z</updated>
<content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>自我这台华硕 VM510LI 安装黑苹果以来一直留下两个问题未解决,一是 VGA,二是耳机麦克风无输入。今天终于在远景坛友关云长羽帖子的帮助下解决了麦克风无输入的问题。</p>
<blockquote>
<p>帖子链接:<a href="http://bbs.pcbeta.com/viewthread-1734702-1-1.html" target="_blank" rel="external">【声卡驱动完善进阶】——关于耳机杂音解决办法及三节点信息驱动双麦克风的猜想</a></p>
</blockquote>
<h1 id="修改-AppleALC"><a href="#修改-AppleALC" class="headerlink" title="修改 AppleALC"></a>修改 AppleALC</h1><h2 id="过程整理"><a href="#过程整理" class="headerlink" title="过程整理"></a>过程整理</h2><p>根据关云长羽的帖子,启发了我,我是 ALC233,和他的声卡一摸一样,但是我们两个的 Codec 并不一样,他内置麦克风有效节点是 Node 0x1a 而我的是 Node 0x1b,故此我并不可以直接使用他的驱动以及方法。</p>
<p>后来我看他的过程,是使用 layout13,他 layout13 本来就有 LineIn 这个线路输入节点,而我并没有,Pathmap 里面也没有关于 0x19 (25)节点的路径,故此我声卡要耳机麦克风生效的话,必须使用符合以下条件。</p>
<ul>
<li>layout4.xml 设定 Inputs 的 Mic 和 LineIn。</li>
<li>添加 LineIn 的 MuteGPIO(如果你的节点是 VREF_80 或者其他数值的话)</li>
<li>PlatformsX.xml 中需要添加 Node 0X19 的有效路径。</li>
<li>PinConfigData.kext 里添加 Node 0x19的 ConfigData。</li>
</ul>
<blockquote>
<p>关于 LineIn 这个节点查找,为何是0X19,关云长羽原贴上有说,而我猜测是不是和修改 Pin Widget Control 后耳机正常无杂音的节点有关系?关于耳机杂音问题参考我之前写的帖子:<a href="http://bbs.pcbeta.com/viewthread-1733228-1-1.html" target="_blank" rel="external">http://bbs.pcbeta.com/viewthread-1733228-1-1.html</a></p>
</blockquote>
<h2 id="layout4-xml"><a href="#layout4-xml" class="headerlink" title="layout4.xml"></a>layout4.xml</h2><p><img src="/2017/03/13/Combo-Audio-Ext-Mic/Combo-Audio-Ext-Mic-01.png" alt="layout4配置"></p>
<ul>
<li>MuteGPIO 由 Noid 0x19 的VREF_80 0x50+0x0100+0x19 > 1342242841(我的 Node 节点是 VREF_HIZ,但是从 ID3 和 ID13 提取的都有这个,当时我不确定是否这个值会影响结果,故此我也加进去了)</li>
<li>SignalProcessing 可以放在 Mic,也可以放在 LineIn,放在那里那里就有麦克风降噪。详细可以看看紫米的帖子<strong><a href="http://bbs.pcbeta.com/viewthread-623626-1-1.html" target="_blank" rel="external">完整製作仿冒 LegacyHDA.kext (12/16)</a></strong></li>
</ul>
<h2 id="Platforms4-xml"><a href="#Platforms4-xml" class="headerlink" title="Platforms4.xml"></a>Platforms4.xml</h2><p>在 AppleALC 里面,ALC233 ID4 的 PathMaps 是没有 Node 0x19 的路径的,因为 Node 19在我们的 Codec 里面根本不是有效节点。</p>
<p>但既然关云长羽说尝试一下将 Node 0x19这个当成有效的 LineIn 节点来做,那么我就直接按照仿冒贴的方法,找到 0X19的 PathMaps。(怎么找请看上面说到的紫米帖)</p>
<p><img src="/2017/03/13/Combo-Audio-Ext-Mic/Combo-Audio-Ext-Mic-02.png" alt="PathMaps配置"></p>
<h2 id="PinConfigData-kext-添加-Node-0X19-的-ConfigData"><a href="#PinConfigData-kext-添加-Node-0X19-的-ConfigData" class="headerlink" title="PinConfigData.kext 添加 Node 0X19 的 ConfigData"></a>PinConfigData.kext 添加 Node 0X19 的 ConfigData</h2><p>这里我偷了下懒,直接从 ID3 和 ID13 复制了 019开头的四组节点信息过来,因为同款声卡,Codec 是一样的,既然前人已经写了数据,那么应该差不了多少。</p>
<p>提取 AppleALC ID4 的 ConfigData</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">01471C10 01471D00 01471E17 01471F90 </div><div class="line">01B71C20 01B71D00 01B71EA0 01B71F90 </div><div class="line">02171C30 02171D10 02171E21 02171F01 </div><div class="line">01470C02</div></pre></td></tr></table></figure>
<p>AppleALC 提取的 ID13</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">01471C10 01471D00 01471E17 01471F99 </div><div class="line">02171C20 02171D10 02171E21 02171F03 </div><div class="line">01A71C30 01A71D01 01A71EA0 01A71F99 </div><div class="line">01971C40 01971D10 01971E81 01971F03</div></pre></td></tr></table></figure>
<p>后来我将 Node 0X19 从 ID13提取出来,然后放入 ID4 的 ConfigData 中,最终的 ConfigData(其中我将最后一个数字改成1,并不是必须,我看紫米的帖子后瞎折腾的,后来成功后发现可用,也就留着没改了。)</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">01471C10 01471D00 01471E17 01471F90 </div><div class="line">01B71C10 01B71D00 01B71EA0 01B71F90 </div><div class="line">02171C30 02171D10 02171E21 02171F01 </div><div class="line">01971C20 01971D10 01971E81 01971F01</div></pre></td></tr></table></figure>
<h2 id="结果"><a href="#结果" class="headerlink" title="结果"></a>结果</h2><p>OK 修改好 AppleALC 编译后,测试一下关云长羽的方法,的确成功了,线路输入有了,而且也有电频输入。</p>
<p>可是,发现了一个问题,第二次插入后再也无法切换回线路输入,而且耳机插入后,又像以前那样只有背景声了。(感觉问题更糟糕了)</p>
<p>用 EAPD-Codec-Commander-master RM 项目的 widget_dump.sh 查看,发现一开机因为我用了脚本,开机是设置 0X19为24,故此第一次插入是正常的,然而拔出后,0X19变成02了,而 0X1B(内置麦克风节点)变成24,再插入耳机,这两个数字不会变了,一直是那样。</p>
<p>后来反复研究无果,编译 AppleALC,修改了无数遍 layout 和 Pathmap,折腾的死去活来的。</p>
<p>第二天,复习关云长羽的帖子,发现他提到的 ALCPlugFix 帖子,我又去看了下这个项目的代码和关云长羽提到的 main.m 文件源码部分,不会编程,但是我发现了一个比较有趣的地方。</p>
<p><img src="/2017/03/13/Combo-Audio-Ext-Mic/Combo-Audio-Ext-Mic-03.png" alt="main.m"></p>
<h1 id="使用-ALCPlugFix-解决耳机插入拔出的-Pin-Widget-Control-设定"><a href="#使用-ALCPlugFix-解决耳机插入拔出的-Pin-Widget-Control-设定" class="headerlink" title="使用 ALCPlugFix 解决耳机插入拔出的 Pin Widget Control 设定"></a>使用 ALCPlugFix 解决耳机插入拔出的 Pin Widget Control 设定</h1><p>ALCPlugFix 这个程序,作者没有写任何的说明,我也是从关云长羽的帖子得知这个程序。</p>
<p><strong><a href="https://github.com/goodwin/ALCPlugFix" target="_blank" rel="external">ALCPlugFix 项目地址</a></strong></p>
<p>后来发现个程序会检测耳机的插入和拔出情况,根据插入或者拔出,可以运行 Shell。</p>
<p>我现在需要的就是:</p>
<p>插入耳机的时候 Node 0x19 Pin Widget Control 为 24,Node 0X1B Pin Widget Control 为 02。</p>
<p>拔出耳机时候 Node 0x19 Pin Widget Control 为 02,Node 0X1B Pin Widget Control 为 24。</p>
<p>最终我根据上章节结果里截图的设置。并且编译后运行 ALCPlugFix 后,耳机的所有问题都得到解决了。</p>
<p>还发现作者已经写好了开机自运行的安装脚本。</p>
<h2 id="使用方法"><a href="#使用方法" class="headerlink" title="使用方法"></a>使用方法</h2><p>下载我编译好的 <strong><a href="ALCPlugFix.zip">ALCPlugFix.zip</a></strong>(编译只适合 ALC233 的情况,如果是需要运行其他的 hda-verb 命令,自己按照上图填好你需要的 hda-verb 命令。)</p>
<p>cd 到 ALCPlugFix 的解压目录,运行以下命令</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">sudo chmod +x install.sh</div><div class="line">sudo ./install.sh</div></pre></td></tr></table></figure>
<p>脚本会安装 ALCPlugFix 和 hda-verb 到 /usr/bin,然后安装 good.win.ALCPlugFix.plist 自启动服务,并加载。(hda-verb 需要放入 CodecCommander.kext)</p>
<p>和我一样都是 9CC3 的朋友可以直接下载我做好的 <strong><a href="AppleALC_For_ALC233_LayoutID4.zip">AppleALC_For_ALC233_LayoutID4.zip</a></strong>驱动。</p>
<p>提供 <strong><a href="AppleALC_For_ALC233_LayoutID4_Codec.zip">AppleALC_For_ALC233_LayoutID4 源码参考</a></strong></p>
]]></content>
<summary type="html">
<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>自我这台华硕 VM510LI 安装黑苹果以来一直留下两个问题未解决,一是 VGA,二是耳机麦克风无输入。今天终于在远景坛友关云长羽帖子的帮助
</summary>
<category term="黑苹果" scheme="http://blog.neroxps.cn/categories/%E9%BB%91%E8%8B%B9%E6%9E%9C/"/>
<category term="黑苹果" scheme="http://blog.neroxps.cn/tags/%E9%BB%91%E8%8B%B9%E6%9E%9C/"/>
<category term="Mac" scheme="http://blog.neroxps.cn/tags/Mac/"/>
<category term="Hackintosh" scheme="http://blog.neroxps.cn/tags/Hackintosh/"/>
<category term="ASUS" scheme="http://blog.neroxps.cn/tags/ASUS/"/>
<category term="VM510LI" scheme="http://blog.neroxps.cn/tags/VM510LI/"/>
<category term="ALC233" scheme="http://blog.neroxps.cn/tags/ALC233/"/>
</entry>
<entry>
<title>华硕 VM510L EFI 分享 9CC3笔记本主板芯片通用</title>
<link href="http://blog.neroxps.cn/2017/03/09/9CC3-EFI-README/"/>
<id>http://blog.neroxps.cn/2017/03/09/9CC3-EFI-README/</id>
<published>2017-03-08T16:00:00.000Z</published>
<updated>2017-08-09T09:33:56.000Z</updated>
<content type="html"><![CDATA[<p>[TOC]</p>
<h1 id="使用说明"><a href="#使用说明" class="headerlink" title="使用说明"></a>使用说明</h1><p>本文件适用于华硕 9CC3 笔记本芯片组。查看方法,win 下鲁大师 > 详细报表。</p>
<p>本 CLOVER 所有的 ACPI 修改均使用 Hotpatch 方式,补丁模块化,故无 DSDT。</p>
<p>本 EFI 在 VM510LI 测试通过</p>
<p>欢迎各位 9CC3 笔记本芯片组的朋友测试,可加群一齐讨论与反馈问题 QQ 群号:621151130</p>
<p>EFI 下载地址:<a href="9CC3-EFI-2017-03-09.zip">9CC3-EFI-2017-03-09.zip</a></p>
<h2 id="目录说明"><a href="#目录说明" class="headerlink" title="目录说明"></a>目录说明</h2><ul>
<li>CLOVER (Clover 目录,请放置在 EFI目录下。需要注意的只有两个地方,CLOVER 的 ACPI 文件夹和 Kext 文件夹。)</li>
<li>Hotpatch ( 所使用到的 hotpatch 源代码。)</li>
<li>Library/Extensions/DummyX86PP_MBP121_800.kext (建议放在系统盘 /Library/Extensions 下并修复权限,DummyX86PP_MBP121_800.kext 是为了修改 X86PlatformPlugin 中的机型数据,将最低 1300MHz 频率改成最低 800MHz。(可要可不要))</li>
<li>UHD-4K/SSDT-Config.aml(如果是4K 屏幕请替换此文件到 CLOVER/ACPI/patched。</li>
<li>usr/bin/hda-verb (睡眠唤醒无声及开机耳机只有背景声使用,配合 CodecCommander.kext 使用,详见帖子 <a href="http://bbs.pcbeta.com/viewthread-1733228-1-1.html" target="_blank" rel="external">http://bbs.pcbeta.com/viewthread-1733228-1-1.html</a></li>
</ul>
<h2 id="ACPI-文件说明"><a href="#ACPI-文件说明" class="headerlink" title="ACPI 文件说明"></a>ACPI 文件说明</h2><h3 id="SSDT-BATT-VM510LI-aml"><a href="#SSDT-BATT-VM510LI-aml" class="headerlink" title="SSDT-BATT-VM510LI.aml"></a>SSDT-BATT-VM510LI.aml</h3><blockquote>
<p>ASUS R557LI 无需使用此 SSDT,仅需放入 ACPIBatteryManager.kext<br>ASUS W519LI 电量无法显示,暂时未知什么问题导致。#2017年03月09日10:24:06</p>
</blockquote>
<p><strong>作用:</strong></p>
<p>修复 9CC3 的电量显示,需要配合 ACPIBatteryManager.kext 驱动使用。</p>
<p><strong>使用方法:</strong></p>
<ol>
<li>在 CLOVER 的 config.list > ACPI > DSDT > Patches 添加以下补丁,并且 SortedOrder 加入 SSDT-BATT-VM510LI.aml</li>
<li>EFI > CLOVER > ACPI > Patches 放入本 SSDT。</li>
</ol>
<p>补丁1:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">Comment:change Method(TACH,1,N) to XACH, optionally pair with SSDT-BATT-VM510LI.aml</div><div class="line">Find:54414348 09</div><div class="line">Replace:58414348 09</div></pre></td></tr></table></figure>
<p>补丁2:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">Comment:change Method(_BIX,0,N) to XBIX, optionally pair with SSDT-BATT-VM510LI.aml</div><div class="line">Find:5F424958 00</div><div class="line">Replace:58424958 00</div><div class="line">``` </div><div class="line"></div><div class="line"></div><div class="line">补丁3:</div></pre></td></tr></table></figure>
<p>Comment:change Method(BIFA,0,N) to XIFA, optionally pair with SSDT-BATT-VM510LI.aml<br>Find:42494641 00<br>Replace:58494641 00<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"></div><div class="line">补丁4:</div></pre></td></tr></table></figure></p>
<p>Comment:change Method(SMBR,3,N) to XMBR, optionally pair with SSDT-BATT-VM510LI.aml<br>Find:534D4252 0B<br>Replace:584D4252 0B<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"></div><div class="line">补丁5:</div></pre></td></tr></table></figure></p>
<p>Comment:change Method(ECSB,7,N) to XCSB, optionally pair with SSDT-BATT-VM510LI.aml<br>Find:45435342 07<br>Replace:58435342 07<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"></div><div class="line">补丁6:</div></pre></td></tr></table></figure></p>
<p>Comment:change Method(SMBW,5,N) to XMBW, optionally pair with SSDT-BATT-VM510LI.aml<br>Find:534D4257 0D<br>Replace:584D4257 0D<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">### SSDT-CodecCommander.aml</div><div class="line"></div><div class="line">**作用:**</div><div class="line"></div><div class="line">用于配置 CodecCommander.kext,修复睡眠唤醒无声问题。</div><div class="line"></div><div class="line">**使用方法:**</div><div class="line"></div><div class="line">1. 将本 SSDT 放入 EFI > CLOVER > ACPI > Patches,并且 SortedOrder 加入 SSDT-CodecCommander.aml。</div><div class="line">2. 将 CodecCommander.kext 放入 CLOVER > Kext</div><div class="line"></div><div class="line">### SSDT-Config.aml</div><div class="line"></div><div class="line">**作用:**</div><div class="line"></div><div class="line">用于配置 Hotpatch 其他补丁,例如 SSDT-PNLF.aml、SSDT-IGPU.aml 等都需要读取这 SSDT 里面的配置。</div><div class="line"></div><div class="line">**使用方法:**</div><div class="line"></div><div class="line">将本 SSDT 放入 EFI > CLOVER > ACPI > Patches。</div><div class="line"></div><div class="line">**配置说明:**</div></pre></td></tr></table></figure></p>
<p>// configuration data for other SSDTs in this pack</p>
<p>DefinitionBlock(“”, “SSDT”, 2, “hack”, “RMCF”, 0)<br>{<br> Device(RMCF)<br> {<br> Name(_ADR, 0) // do not remove</p>
<pre><code> Method(HELP)
{
Store("TYPE indicates type of the computer. 0: desktop, 1: laptop", Debug)
Store("HIGH selects display type. 1: high resolution, 2: low resolution", Debug)
Store("DPTS for laptops only. 1: enables/disables DGPU in _WAK/_PTS", Debug)
Store("SHUT enables shutdown fix. 1: disables _PTS code when Arg0==5", Debug)
Store("AUDL indicates audio layout-id for patched AppleHDA. Ones: no injection", Debug)
Store("BKLT indicates the type of backlight control. 0: IntelBacklight, 1: AppleBacklight", Debug)
Store("LMAX indicates max for IGPU PWM backlight. Ones: Use default, other values must match framebuffer", Debug)
}
// TYPE: Indicates the type of computer... desktop or laptop
//
// 0: desktop
// 0: 台式机
// 1: laptop
// 1: 笔记本
Name(TYPE, 1)
// HIGH: High resolution/low resolution selection. Affects IGPU injection.
// HIGH: 高分辨率/低分辨率选择。 影响IGPU注入。
// For 1600x900+ on Sandy/Ivy, use 1
// 对于1600x900 +在Sandy / Ivy,请使用1
// For UHD/QHD+ on Haswell/Broadwell, use 1
// 对于Haswell / Broadwell的UHD / QHD +,请使用1
// Others (low resolution), use 0
// 其他(低分辨率),使用0
Name(HIGH, 0)
// DPTS: For laptops only: set to 1 if you want to enable and
// DPTS:仅适用于笔记本电脑:如果要启用和,请设置为1
// disable the DGPU _PTS and _WAK.
// 禁用DGPU _PTS和_WAK。
// 0: does not manipulate the DGPU in _WAK and _PTS
// 0:不操作_WAK和_PTS中的DGPU
// 1: disables the DGPU in _WAK and enables it in _PTS
// 1:禁用_WAK中的DGPU,并在_PTS中启用它
Name(DPTS, 0)
// SHUT: Shutdown fix, disable _PTS code when Arg0==5 (shutdown)
// SHUT:关闭修复,当Arg0 == 5(关闭)时禁用_PTS代码,
// 0: does not affect _PTS behavior during shutdown
// 0:在关闭期间不影响_PTS行为
// 1: disables _PTS code during shutdown
// 1:在关闭期间禁用_PTS代码
Name(SHUT, 0)
// AUDL: Audio Layout
// AUDL:音频布局
// The value here will be used to inject layout-id for HDEF and HDAU
// 这里的值将用于注入HDEF和HDAU的layout-id
// If set to Ones, no audio injection will be done.
// 如果设置为Ones,则不会进行音频插入。
Name(AUDL, Ones)
// BKLT: Backlight control type
// BKLT:背光控制类型
// 0: Using IntelBacklight.kext
// 0:使用IntelBacklight.kext
// 1: Using AppleBacklight.kext + AppleBacklightInjector.kext
// 1:使用AppleBacklight.kext + AppleBacklightInjector.kext
Name(BKLT, 0)
// LMAX: Backlight PWM MAX. Must match framebuffer in use.
// LMAX:背光PWM最大值。 必须匹配使用中的帧缓冲区。
// Ones: Default will be used (0x710 for Ivy/Sandy, 0xad9 for Haswell/Broadwell)
// Ones:将使用默认(Ivy / Sandy 的默认值是 0x710,Haswell / Broadwell 的默认值是 0xad9)
// Other values: must match framebuffer
// 其他值:必须与framebuffer相匹配
Name(LMAX, Ones)
}
</code></pre><p>}<br>//EOF<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">上面 RM 都注释了,我以 Google 翻译过来,方便理解。</div><div class="line"></div><div class="line">* 第一个值,**TYPE** 从 SSDT-IGPU 调用,影响显卡 ID 的注入。查看了下代码,好像是区分是否注入高分屏 ID 有关。</div><div class="line">* 第二个值,**HIGH** 从 SSDT-IGPU 调用,影响点卡 ID 的注入。当 TYPE 设置成笔记本才生效。</div><div class="line">* 第三个值,**DPTS** 从 SSDT-PTSWAK 调用,这个 SSDT 是重写了睡眠和唤醒的方法,加入了一些我们补丁需要用到的代码,这里设置 1 则会在睡眠的时候开启显卡,唤醒后关闭显卡。</div><div class="line">* 第四个值,**SHUT** 从 SSDT-PTSWAK 调用,这个 SSDT 功能同上,这里设置 1 则会在关机的时候禁用 _PTS,和 Shutdown fix 同理。</div><div class="line">* 第五个值,**AUDL** 从 SSDT-HDAU 和 SSDT-HDEF 调用,这两个 SSDT 前者负责注入声卡 ID,后者则负责注入 HDMI 声卡 ID,而这个值就是控制两个 SSDT 注入声卡的行为,如果写 Ones 则什么都不注入,如果写 3,则声卡的 layout-id 则为 3。</div><div class="line">* 第六个值,**BKLT** 从 SSDT-PNLF 调用,这个 SSDT 看名字大家应该都很熟悉,就是加入 PNLF 设备,用来启用我们的笔记本亮度调节驱动的,而这个值是控制亮度调节的驱动是用哪一种,0 是使用 IntelBacklight.kext,1 是使用 AppleBacklight.kext + AppleBacklightInjector.kext。</div><div class="line">* 第七个值,**LMAX** 从 SSDT-PNLF 调用,这个 SSDT 同上,这个值是设置背光的 PWM 最大值,Ones 是使用默认值,Ivy / Sandy 的默认值是 0x710,Haswell / Broadwell 的默认值是 0xad9,你也可以设置其他值,但是这个值必须与 framebuffer 相匹配。</div><div class="line"></div><div class="line"></div><div class="line">### SSDT-DAMD-VM510LI.aml</div><div class="line"></div><div class="line">**作用:**</div><div class="line"></div><div class="line">用于屏蔽 9CC3 芯片组的独立显卡(AMD 与 NVIDIA 通用)</div><div class="line"></div><div class="line">**使用方法:**</div><div class="line"></div><div class="line">1. 在 CLOVER 的 config.list > ACPI > DSDT > Patches 添加以下补丁,并且 SortedOrder 加入 SSDT-DAMD-VM510LI.aml。</div><div class="line">2. EFI > CLOVER > ACPI > Patches 放入本 SSDT。</div><div class="line"></div><div class="line"></div><div class="line">补丁1:</div></pre></td></tr></table></figure></p>
<p>Comment:change Method(SGOF,0,Serialized) to XGOF, optionally pair with SSDT-DAMD-VM510LI.aml<br>Find:53474F46 08<br>Replace:58474F46 08<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"></div><div class="line">补丁2:</div></pre></td></tr></table></figure></p>
<p>Comment:Comment:change Method(_REG,0,Serialized) to XREG, optionally pair with SSDT-DAMD-VM510LI.aml<br>Find:5F524547 02<br>Replace:58524547 02<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">### SSDT-Fn-VM510LI.aml</div><div class="line"></div><div class="line">**作用:**</div><div class="line"></div><div class="line">配合 AsusNBFnKeys.kext 驱动使用,修改 _QE0 和 _QF0 方法而实现 FN 亮度调整功能。</div><div class="line"></div><div class="line">**使用方法:**</div><div class="line"></div><div class="line">1. 在 CLOVER 的 config.list > ACPI > DSDT > Patches 添加以下补丁,并且 SortedOrder 加入 SSDT-Fn-VM510LI.aml。</div><div class="line">2. EFI > CLOVER > ACPI > Patches 放入本 SSDT。</div><div class="line"></div><div class="line"></div><div class="line">补丁1:</div></pre></td></tr></table></figure></p>
<p>Comment:change _Q0E to XQ0E, optionally pair with SSDT-Fn.aml<br>Find:5F513045<br>Replace:58513045<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"></div><div class="line">补丁2:</div></pre></td></tr></table></figure></p>
<p>Comment:change _Q0F to XQ0F, optionally pair with SSDT-Fn.aml<br>Find:5F513046<br>Replace:58513046<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">### SSDT-HDAU.aml 与 SSDT-HDEF.aml</div><div class="line"></div><div class="line">**作用:**</div><div class="line"></div><div class="line">注入音频 layout-id 使得声卡出声,需要配合 AppleALC.kext。</div><div class="line"></div><div class="line">**使用方法:**</div><div class="line"></div><div class="line">1. 在 CLOVER 的 config.list > ACPI > DSDT > Patches 添加以下补丁,并且 SortedOrder 加入 SSDT-HDEF.aml 和 SSDT-HDEF.aml。</div><div class="line">2. EFI > CLOVER > ACPI > Patches 放入本 SSDT。</div><div class="line">3. 修改 SSDT-Config.aml 的 AUDL 字段为所对应的 layout-id,9CC3 是 ALC233(ALC3236),最佳的 layout-id 是4,故此此值应当设置为4。</div><div class="line"></div><div class="line">补丁:</div></pre></td></tr></table></figure></p>
<p>Comment:change B0D3 to HDAU, optionally pair with SSDT-HDAU.aml<br>Find:42304433<br>Replace:48444155<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"></div><div class="line">### SSDT-IGPU.aml</div><div class="line"></div><div class="line">**作用:**</div><div class="line"></div><div class="line">注入显卡 AAPL,snb-platform-id 驱动核心显卡。</div><div class="line"></div><div class="line">**使用方法:**</div><div class="line"></div><div class="line">1. 在 CLOVER 的 config.list > ACPI > DSDT > Patches 添加以下补丁,并且 SortedOrder 加入 SSDT-IGPU.aml。</div><div class="line">2. EFI > CLOVER > ACPI > Patches 放入本 SSDT。</div><div class="line">3. 修改 SSDT-Config.aml 的 TYPE 字段为 1。</div><div class="line">4. 如果是高分辨率(超过1080P)屏幕,请修改 SSDT-Config.aml 的 HIGH 字段为 1,其余分辨率为 0。</div><div class="line"></div><div class="line"></div><div class="line">补丁:</div></pre></td></tr></table></figure></p>
<p>Comment:change GFX0 to IGPU, optionally pair with SSDT-IGPU.aml<br>Find:47465830<br>Replace:49475055<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">### SSDT-PNLF.aml</div><div class="line"></div><div class="line">**作用:**</div><div class="line"></div><div class="line">亮度调节补丁,本补丁支持两种驱动方式。(AppleBacklight.kext + AppleBacklightInjector.kext 或 IntelBacklight.kext) 目前使用的是 IntelBacklight.kext</div><div class="line"></div><div class="line">**使用方法:**</div><div class="line"></div><div class="line">1. 在 CLOVER 的 config.list > ACPI > SortedOrder 加入 SSDT-PNLF.aml。</div><div class="line">2. EFI > CLOVER > ACPI > Patches 放入本 SSDT。</div><div class="line"></div><div class="line">### SSDT-PRW.aml</div><div class="line"></div><div class="line">**作用:**</div><div class="line"></div><div class="line">修复 USB 睡眠唤醒补丁。</div><div class="line"></div><div class="line"></div><div class="line">**使用方法:**</div><div class="line"></div><div class="line">1. 在 CLOVER 的 config.list > ACPI > DSDT > Patches 添加以下补丁,并且 SortedOrder 加入 SSDT-PRW.aml。</div><div class="line">2. EFI > CLOVER > ACPI > Patches 放入本 SSDT。</div><div class="line"></div><div class="line"></div><div class="line">补丁:</div></pre></td></tr></table></figure></p>
<p>Comment:change Method(GPRW,2,N) to XPRW, pair with SSDT-PRW.aml<br>Find:47505257 02<br>Replace:58505257 02<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">### SSDT-SMBUS.aml</div><div class="line"></div><div class="line">**作用:**</div><div class="line"></div><div class="line">SMBUS fix 补丁。</div><div class="line"></div><div class="line">**使用方法:**</div><div class="line"></div><div class="line">1. 在 CLOVER 的 config.list > ACPI > SortedOrder 加入 SSDT-SMBUS.aml。</div><div class="line">2. EFI > CLOVER > ACPI > Patches 放入本 SSDT。</div><div class="line"></div><div class="line">### SSDT-ssdtPRGen.aml</div><div class="line"></div><div class="line">**作用:**</div><div class="line"></div><div class="line">CPU I5 5200U 的 SSDT,用于加载 X86PlatformPlugin 的机型参数,使得加载原生电源管理。</div><div class="line"></div><div class="line">如果是其他 CPU,请自行使用 ssdtPRGen.sh 生成自己 CPU 的 SSDT,重命名为 SSDT-ssdtPRGen.aml 放入 EFI > CLOVER > ACPI > Patches。</div><div class="line"></div><div class="line">**使用方法:**</div><div class="line"></div><div class="line">1. 在 CLOVER 的 config.list > ACPI > SortedOrder 加入 SSDT-ssdtPRGen.aml。</div><div class="line">2. EFI > CLOVER > ACPI > Patches 放入本 SSDT。</div><div class="line"></div><div class="line">### SSDT-XOSI.aml</div><div class="line"></div><div class="line">**作用:**</div><div class="line"></div><div class="line">OS Check Fix</div><div class="line"></div><div class="line">**使用方法:**</div><div class="line"></div><div class="line">1. 在 CLOVER 的 config.list > ACPI > DSDT > Patches 添加以下补丁,并且 SortedOrder 加入 SSDT-XOSI.aml。</div><div class="line">2. EFI > CLOVER > ACPI > Patches 放入本 SSDT。</div><div class="line"></div><div class="line">补丁:</div></pre></td></tr></table></figure></p>
<p>Comment:change _OSI to XOSI, pair with SSDT-XOSI.aml<br>Find:5F4F5349<br>Replace:584F5349<br>```</p>
<h2 id="Kext-文件说明"><a href="#Kext-文件说明" class="headerlink" title="Kext 文件说明"></a>Kext 文件说明</h2><table>
<thead>
<tr>
<th>驱动名称</th>
<th>版本号</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>ACPIBatteryManager.kext</td>
<td>2016-1118</td>
<td>配合 SSDT-BATT-VM510LI 显示电量。</td>
</tr>
<tr>
<td>AppleALC.kext</td>
<td>1.0.19</td>
<td>驱动声卡,需配合 SSDT-HDAU.aml 与 SSDT-HDEF.aml 使用。 另注入 ID 需在 SSDT-Config.aml 的 AUDL 字段注入 layout-id,根据 9CC3 提取的 Codec 得出,最符合的 layout-id 是4。</td>
</tr>
<tr>
<td>ApplePS2SmartTouchPad.kext</td>
<td>v4.7 beta 5</td>
<td>触摸板与键盘驱动</td>
</tr>
<tr>
<td>AsusNBFnKeys.kext</td>
<td>v2.6</td>
<td>华硕专用 FN 驱动,需配合 SSDT-Fn-VM510LI.aml 使用。</td>
</tr>
<tr>
<td>CodecCommander.kext</td>
<td>2016-0721</td>
<td>修复睡眠唤醒后无声问题,修复耳机只有背景声问题。</td>
</tr>
<tr>
<td>IntelBacklight.kext</td>
<td>2017-0206</td>
<td>显示屏亮度驱动,需配合 SSDT-PNLF.aml 使用。</td>
</tr>
<tr>
<td>RealtekRTL8111.kext</td>
<td>2015-1230</td>
<td>有线网卡驱动</td>
</tr>
<tr>
<td>FakeSMC.kext and FakeSMC*.kext</td>
<td>2017-0117</td>
<td>黑苹果必备驱动</td>
</tr>
</tbody>
</table>
<h2 id="Clover-配置文件-Config-list-说明"><a href="#Clover-配置文件-Config-list-说明" class="headerlink" title="Clover 配置文件 Config.list 说明"></a>Clover 配置文件 Config.list 说明</h2><h3 id="ACPI"><a href="#ACPI" class="headerlink" title="ACPI"></a>ACPI</h3><h4 id="Fixes"><a href="#Fixes" class="headerlink" title="Fixes"></a>Fixes</h4><ul>
<li>AddDTGP_0001 (添加 DTGP 方法,修复 ACPI 出现的 DTGP 错误)</li>
<li>FIX_ACST_4000000 (修复 ASUS 与 Apple 的电源管理寄存器命名冲突)</li>
<li>FIX_RTC_20000 (RTC Fix 从RTC设备中排除IRQ(0))</li>
<li>FIX_S3D_2000000 (通过更正_S3D方法解决一些睡眠/唤醒问题。)</li>
<li>FIX_WAK_200000 (同等于 DSDT Fix _WAK Arg0 v2 补丁)</li>
<li>FixHPET_0010 (同等于 DSDT HPET Fix 补丁)</li>
<li>FixIPIC_0040 (同等于 IRQ Fix 补丁)</li>
<li>NewWay_80000000 (应用新补丁,Clover 从 4006 版本开始取消此选项。)</li>
</ul>
<h4 id="Patches"><a href="#Patches" class="headerlink" title="Patches"></a>Patches</h4><ul>
<li>change _OSI to XOSI, pair with SSDT-XOSI.aml (配合 SSDT-XOSI 使用,同等于 OS Check Fix。)</li>
<li>change EHC1 to EH01 (修复 USB 设备命名,使其更符合 Apple 规范。)</li>
<li>change EHC2 to EH02 (同上)</li>
<li>Rename _DSM to XDSM (修复开机关于 _DSM 五国问题。)</li>
<li>change GFX0 to IGPU, optionally pair with SSDT-IGPU.aml (修改 GFX0 设备名称,更符合 Apple 规范,另配合 SSDT-IGPU.aml 注入显卡 ID,驱动显卡。)</li>
<li>change Method(GPRW,2,N) to XPRW, pair with SSDT-PRW.aml (配合 SSDT-PRW.aml 修复 USB 唤醒问题,同等于 USB3 _PRW 0X0D(或0X6D)(instant wake)。)</li>
<li>change B0D3 to HDAU, optionally pair with SSDT-HDAU.aml (配合 SSDT-HDAU.aml 与 SSDT-HDEF.aml 和 AppleALC.kext 驱动声卡。)</li>
<li>change _Q0E to XQ0E, optionally pair with SSDT-Fn.aml (配合 SSDT-Fn.aml 与 AsusNBFnKeys.kext 使 FN f5 f6 的亮度调整按键生效。)</li>
<li>change _Q0F to XQ0F, optionally pair with SSDT-Fn.aml (同上。)</li>
<li>change Method(TACH,1,N) to XACH, optionally pair with SSDT-BATT-VM510LI.aml (配合 SSDT-BATT-VM510LI.aml 和 ACPIBatteryManager.kext 显示电量。)</li>
<li>change Method(_BIX,0,N) to XBIX, optionally pair with SSDT-BATT-VM510LI.aml (同上。)</li>
<li>change Method(BIFA,0,N) to XIFA, optionally pair with SSDT-BATT-VM510LI.aml(同上。)</li>
<li>change Method(SMBR,3,N) to XMBR, optionally pair with SSDT-BATT-VM510LI.aml(同上。)</li>
<li>change Method(ECSB,7,N) to XCSB, optionally pair with SSDT-BATT-VM510LI.aml(同上。)</li>
<li>change Method(SMBW,5,N) to XMBW, optionally pair with SSDT-BATT-VM510LI.aml(同上。)</li>
<li>change Method(SGOF,0,Serialized) to XGOF, optionally pair with SSDT-DAMD-VM510LI.aml (配合 SSDT-DAMD-VM510LI.aml 屏蔽独显。)</li>
<li>Comment:change Method(_REG,0,Serialized) to XREG, optionally pair with SSDT-DAMD-VM510LI.aml (同上。)</li>
</ul>
<h4 id="DropTables"><a href="#DropTables" class="headerlink" title="DropTables"></a>DropTables</h4><ul>
<li>SSDT Cpc_Tabl (禁用主板提供的 cpuPR SSDT,换成我们使用 ssdtPRGen 生成的 ssdt。)</li>
<li>DMAR</li>
</ul>
<h3 id="KernelAndKextPatches"><a href="#KernelAndKextPatches" class="headerlink" title="KernelAndKextPatches"></a>KernelAndKextPatches</h3><h4 id="KextsToPatch"><a href="#KextsToPatch" class="headerlink" title="KextsToPatch"></a>KextsToPatch</h4><ul>
<li>AirPort Extreme (我更换了 BCM94352hmb 使用的补丁,9CC3 是 ar9565 的网卡,无需此补丁,我这里禁用了此补丁)</li>
<li>AirPortBrcm4360 - fcvo, 10.12.x (credit the-darkvoid) (同上)</li>
<li>10.11-BCM94352-5GHz-US-FCC-dv (同上)</li>
<li>TRIM function for non-Apple SSDs (为 SSDT 开启 TRIM)</li>
<li>Boot graphics glitch, 10.12.dp1 (改善 10.12 开机撕裂苹果图标的补丁,只能加快撕裂的消失时间,并不能完全去掉。)</li>
<li>Disable minStolenSize less or equal fStolenMemorySize assertion, 10.12.0 ( (based on Austere.J patch) (取消 10.12 限制 minStolenSize 的限制,9CC3 可以在 Bios 设置,故此我禁用此补丁。)</li>
<li>HDMI-audio 0x16260006 (HDMI 音频补丁)</li>
<li>change 15 port limit to 20 in AppleUSBXHCIPCI (15个 USB 端口限制补丁,9CC3 并没有超过15个,可不用此补丁,这里默认禁用)</li>
</ul>
<h3 id="SMBIOS"><a href="#SMBIOS" class="headerlink" title="SMBIOS"></a>SMBIOS</h3><ul>
<li>机型选择 MacBookPro12,1</li>
<li>如果开机遇到 can’t perform kext scan: no kext summary 的五国,请勾上 Trust,默认是启用 Trust。</li>
</ul>
<h1 id="AR9565"><a href="#AR9565" class="headerlink" title="AR9565"></a>AR9565</h1><p><strong>AR9565 蓝牙无解</strong></p>
<p>驱动下载地址:<a href="9565.zip">9565.zip</a> </p>
<p>作者发布下载地址:<a href="http://www.mediafire.com/file/2rjm76vro8ha28l/9565.zip" target="_blank" rel="external">9565.zip</a></p>
<p>发布地址(需要翻墙):<a href="https://www.youtube.com/watch?v=4Q_bLKSCFDU" target="_blank" rel="external">Kext for wifi ar9565 for hackintosh macOS Sierra 10.12 (16A323)</a></p>
<p>使用说明:</p>
<ol>
<li>open terminal and write</li>
<li>defaults write com.apple.finder AppleShowAllFiles YES</li>
<li>killall Finder</li>
<li>go to System/Library/Extensions and delete IO80211Family.kext and IO80211FamilyV2.kext</li>
<li>open kext utility and install corecapture.kext and CoreCaptureResponder.kext</li>
<li>open clover configurator and mount your efi partition</li>
<li>go to EFI/CLOVER/kexts/10.12 and move IO80211Family.kext</li>
<li>reboot enjoy</li>
</ol>
<p>My youtube channel <a href="https://www.youtube.com/channel/UCzxRc20c5_bC2zaBFQ4GFsQ" target="_blank" rel="external">https://www.youtube.com/channel/UCzxRc20c5_bC2zaBFQ4GFsQ</a></p>
<p>Like and fap thanks for watching.</p>
<ol>
<li>打开终端 执行 (显示隐藏文件)<br><code>defaults write com.apple.finder AppleShowAllFiles YES</code><br><code>killall Finder</code></li>
<li>删除S/L/E内的 IO80211Family.kext和IO80211FamilyV2.kext</li>
<li>使用kext utility 安装 corecapture.kext 和 CoreCaptureResponder.kext</li>
<li>把IO80211Family.kext放到EFI/CLOVER/kexts/10.12</li>
<li>重启</li>
</ol>
<h1 id="解决-ALC233-唤醒无声及带麦克风耳机只有背景声"><a href="#解决-ALC233-唤醒无声及带麦克风耳机只有背景声" class="headerlink" title="解决 ALC233 唤醒无声及带麦克风耳机只有背景声"></a>解决 ALC233 唤醒无声及带麦克风耳机只有背景声</h1><p>请看此贴 <a href="http://bbs.pcbeta.com/viewthread-1733228-1-1.html" target="_blank" rel="external">关于耳机只有背景声及唤醒无声的探讨【更新ALC233解决方案】</a></p>
<h1 id="已知问题"><a href="#已知问题" class="headerlink" title="已知问题"></a>已知问题</h1><ol>
<li>二合一耳机麦克风无输入。</li>
<li>SD 读卡器 ID 为 0x0129 无解。</li>
<li>亮度无法保存。</li>
<li>VGA 无输出。</li>
<li>ASUS W519LI 电量无法显示,暂时未知什么问题导致。 #2017年03月09日10:24:06</li>
</ol>
<h1 id="高分屏"><a href="#高分屏" class="headerlink" title="高分屏"></a>高分屏</h1><p>如 ASUS FL5800L </p>
<ol>
<li>更换 UHD 目录下的 SSDT-Config.aml 文件(HIGH 字段改成1)。</li>
<li>突破高分屏限制开启内屏请参考 <a href="http://bbs.pcbeta.com/viewthread-1730701-1-1.html" target="_blank" rel="external">驱动显卡后4k屏幕点不亮的问题</a></li>
</ol>
]]></content>
<summary type="html">
<p>[TOC]</p>
<h1 id="使用说明"><a href="#使用说明" class="headerlink" title="使用说明"></a>使用说明</h1><p>本文件适用于华硕 9CC3 笔记本芯片组。查看方法,win 下鲁大师 &gt; 详细报表。</p>
</summary>
<category term="黑苹果" scheme="http://blog.neroxps.cn/categories/%E9%BB%91%E8%8B%B9%E6%9E%9C/"/>
<category term="黑苹果" scheme="http://blog.neroxps.cn/tags/%E9%BB%91%E8%8B%B9%E6%9E%9C/"/>
<category term="Mac" scheme="http://blog.neroxps.cn/tags/Mac/"/>
<category term="Hackintosh" scheme="http://blog.neroxps.cn/tags/Hackintosh/"/>
<category term="ASUS" scheme="http://blog.neroxps.cn/tags/ASUS/"/>
<category term="VM510LI" scheme="http://blog.neroxps.cn/tags/VM510LI/"/>
</entry>
<entry>
<title>BCM94252HMB 国家地区代码修改</title>
<link href="http://blog.neroxps.cn/2017/03/07/BCM94352-5GHz-CN/"/>
<id>http://blog.neroxps.cn/2017/03/07/BCM94352-5GHz-CN/</id>
<published>2017-03-06T16:00:00.000Z</published>
<updated>2017-08-09T09:33:54.000Z</updated>
<content type="html"><![CDATA[<p>我们常用的 5G 频道补丁</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">Name:AirPortBrccom.apple.driver.AirPort.Brcm4360m4360</div><div class="line">Find:4183FCFF742C48</div><div class="line">Replace:66C7065553EB2B</div></pre></td></tr></table></figure>
<p>其中修改的 55 53 就是 US 的意思.</p>
<p>那么修改成 CN 就是 43 4E</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">neros-MBP:~ nero$ echo -n CN |xxd</div><div class="line">00000000: 434e CN</div><div class="line">neros-MBP:~ nero$ echo -n US |xxd</div><div class="line">00000000: 5553 US</div></pre></td></tr></table></figure>
<p>故此,我们将补丁修改为</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">Name:AirPortBrccom.apple.driver.AirPort.Brcm4360m4360</div><div class="line">Find:4183FCFF742C48</div><div class="line">Replace:66C706434EEB2B</div><div class="line">Comment10.11-BCM94352-5GHz-CN-dv</div></pre></td></tr></table></figure>
<blockquote>
<p>出处 <a href="https://www.tonymacx86.com/threads/guide-airport-pcie-half-mini-v2.104850/page-209#post-1350761" target="_blank" rel="external">https://www.tonymacx86.com/threads/guide-airport-pcie-half-mini-v2.104850/page-209#post-1350761</a></p>
</blockquote>
<p>2017年03月12日 更新</p>
<p>将代码改成 #a 可以开启所有频段,自适应所有国家代码。</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">Name:com.apple.driver.AirPort.Brcm4360</div><div class="line">Find:4183fcff 742c48</div><div class="line">Replace:66c70623 61eb2b</div><div class="line">Comment:10.11-BCM94352-5GHz-#a-dv</div></pre></td></tr></table></figure>
<p>另 Name 最好写com.apple.driver.AirPort.Brcm4360,不要写 AirPortBrcm4360,因为这样 Kext to Patch 会寻找所有包含 AirPortBrcm4360 的 Kext 都修补一次。</p>
]]></content>
<summary type="html">
<p>我们常用的 5G 频道补丁</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><d
</summary>
<category term="黑苹果" scheme="http://blog.neroxps.cn/categories/%E9%BB%91%E8%8B%B9%E6%9E%9C/"/>
<category term="黑苹果" scheme="http://blog.neroxps.cn/tags/%E9%BB%91%E8%8B%B9%E6%9E%9C/"/>
<category term="Mac" scheme="http://blog.neroxps.cn/tags/Mac/"/>
<category term="Hackintosh" scheme="http://blog.neroxps.cn/tags/Hackintosh/"/>
<category term="ASUS" scheme="http://blog.neroxps.cn/tags/ASUS/"/>
<category term="VM510LI" scheme="http://blog.neroxps.cn/tags/VM510LI/"/>
<category term="BCM94252HMB" scheme="http://blog.neroxps.cn/tags/BCM94252HMB/"/>
</entry>
<entry>
<title>ACPI 一些备忘</title>
<link href="http://blog.neroxps.cn/2017/02/26/ACPI-Memo/"/>
<id>http://blog.neroxps.cn/2017/02/26/ACPI-Memo/</id>
<published>2017-02-25T16:00:00.000Z</published>
<updated>2017-08-09T09:33:54.000Z</updated>
<content type="html"><![CDATA[<p><strong>有时候查看 ACPI 时候,为了熟悉他的逻辑,需要学习一些 ACPI 语法,这里是关于 ACPI 语法的备忘录。</strong></p>
<p><strong>本备忘均从 《Advanced Configuration and Power Interface Specification》 查阅,并使用 Google 翻译得来,本人英语极渣故此不确保翻译准确,如有需要请查阅原版文档。</strong></p>
<h1 id="运算符"><a href="#运算符" class="headerlink" title="运算符"></a>运算符</h1><h2 id="LEqual(逻辑等)"><a href="#LEqual(逻辑等)" class="headerlink" title="LEqual(逻辑等)"></a>LEqual(逻辑等)</h2><h3 id="语法"><a href="#语法" class="headerlink" title="语法"></a>语法</h3><p><code>LEqual(Source1,Source2)=> Boolean Source1 == Source2 => Boolean</code></p>
<h3 id="参数"><a href="#参数" class="headerlink" title="参数"></a>参数</h3><p>Source1和Source2必须各自求值为整数,字符串或缓冲区。 Source1的数据类型指示所需的Source2类型。 如果需要匹配Source1的类型,则会隐式转换Source2。</p>
<h3 id="描述"><a href="#描述" class="headerlink" title="描述"></a>描述</h3><p>如果值相等,则返回True; 否则返回False。 对于整数,执行数字比较。 对于字符串和缓冲区,只有当两个长度相同并且逐字节比较的结果表明完全相等时才返回True。</p>
<h2 id="LOr(逻辑或)"><a href="#LOr(逻辑或)" class="headerlink" title="LOr(逻辑或)"></a>LOr(逻辑或)</h2><h3 id="语法-1"><a href="#语法-1" class="headerlink" title="语法"></a>语法</h3><p><code>LOr(Source1,Source2)=> Boolean Source1 || Source2 => Boolean</code></p>
<h3 id="参数-1"><a href="#参数-1" class="headerlink" title="参数"></a>参数</h3><p>Source1和Source2被计算为整数。 </p>
<h3 id="描述-1"><a href="#描述-1" class="headerlink" title="描述"></a>描述</h3><p>如果任一值不为零,则返回True; 否则返回False。</p>
<h2 id="Decrement-整数递减"><a href="#Decrement-整数递减" class="headerlink" title="Decrement (整数递减)"></a>Decrement (整数递减)</h2><h3 id="语法-2"><a href="#语法-2" class="headerlink" title="语法"></a>语法</h3><p><code>Decrement (Minuend) => Integer Minuend-- => Integer</code></p>
<h3 id="参数-2"><a href="#参数-2" class="headerlink" title="参数"></a>参数</h3><p>Minuend应该为一个整数。</p>
<h3 id="描述-2"><a href="#描述-2" class="headerlink" title="描述"></a>描述</h3><p>此操作将Minuend减1,并将结果存储回Minuend。 等效于 <code>Subtract(Minuend,1,Minuend)</code>。 下溢条件被忽略,结果为Ones。</p>
<hr>
<h1 id="功能"><a href="#功能" class="headerlink" title="功能"></a>功能</h1><h2 id="Sleep-(毫秒级-Sleep)"><a href="#Sleep-(毫秒级-Sleep)" class="headerlink" title="Sleep (毫秒级 Sleep)"></a>Sleep (毫秒级 Sleep)</h2><h3 id="语法-3"><a href="#语法-3" class="headerlink" title="语法"></a>语法</h3><p><code>Sleep (数值 毫秒)</code></p>
<h3 id="参数-3"><a href="#参数-3" class="headerlink" title="参数"></a>参数</h3><p>Sleep项用于实现长期定时要求。 执行被延迟至少所需的毫秒数。</p>
<h3 id="描述-3"><a href="#描述-3" class="headerlink" title="描述"></a>描述</h3><p>睡眠的实现是将请求舍入直到由OS支持的最接近的睡眠时间并放弃处理器。(The implementation of Sleep is to round the request up to the closest sleep time supported by the OS and relinquish the processor.)</p>
<p><em>以上我猜测:使用此方法可以将该设备进入休眠状态(切断电源)</em></p>
<h2 id="Stall-短时间停止"><a href="#Stall-短时间停止" class="headerlink" title="Stall (短时间停止)"></a>Stall (短时间停止)</h2><h3 id="语法-4"><a href="#语法-4" class="headerlink" title="语法"></a>语法</h3><p><code>Stall (微秒=10^6 秒)</code></p>
<h3 id="参数-4"><a href="#参数-4" class="headerlink" title="参数"></a>参数</h3><p>Stall项用于实现短期时序要求。 执行被延迟至少所需的微秒数。</p>
<h3 id="描述-4"><a href="#描述-4" class="headerlink" title="描述"></a>描述</h3><p>Stall的实现是特定于OS的,但不能放弃对处理器的控制。 因此,超过100微秒的延迟必须使用Sleep而不是Stall。</p>
<h1 id="系统保留方法"><a href="#系统保留方法" class="headerlink" title="系统保留方法"></a>系统保留方法</h1><h2 id="INI-(init)"><a href="#INI-(init)" class="headerlink" title="_INI (init)"></a>_INI (init)</h2><p>_INI是执行设备特定初始化的设备初始化对象。 此控制方法位于设备对象下,并且仅当OSPM加载描述表时运行。 有一些限制,当这个方法被调用和管理写这个方法的代码。 _INI方法只能访问已被指示为可用的操作区域,由_REG方法定义。 _REG方法在第6.5.4节“_REG(Region)”中描述。此控制方法在运行_ADR,_CID,_HID,_SUN和_UID之前运行。</p>
<p>返回值:没有</p>
<p>在评估_INI对象之前,OSPM评估设备的_STA对象。如果设备不存在_STA对象,则假定设备既存在又起作用。如果_STA方法指示设备存在,OSPM将评估设备的_INI(如果存在_INI方法),并将检查_INI方法的设备的每个子项。如果_STA方法指示设备不存在并且不起作用,则OSPM将不运行_INI,并且不会检查设备的_INI方法的子代。如果_STA对象评估指示设备不存在但是功能正常,OSPM将不会评估_INI对象,但会检查设备的每个子对象的_INI对象(有关此特殊情况的说明,请参阅_STA的说明) 。)如果在表已经加载后设备出现,OSPM将不会评估_INI方法,也不会检查_INI方法的子项。</p>
<p>OSPM根据_STA Present和Functional位执行_INI对象操作,总结在下表中。</p>
<p>Table 6-223 OSPM _INI Object Actions</p>
<table>
<thead>
<tr>
<th>_STA Present Bit</th>
<th>_STA 功能Bit</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>0</td>
<td>不要运行_INI,不要检查设备的子项。</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>不要运行_INI,检查设备的子项。</td>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>运行_INI,检查设备子项。</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>运行_INI,检查设备子项。</td>
</tr>
</tbody>
</table>
<p>_INI控制方法通常用于将设备切换到传统操作模式。 例如,平台引导固件通常将旧式模式下的CardBus控制器配置为支持传统操作系统。 在使用ACPI操作系统枚举设备之前,必须将CardBus控制器初始化为CardBus模式。 对于这样的系统,供应商可以在CardBus控制器下包括_INI控制方法以将设备切换到CardBus模式。</p>
<p>除了设备初始化之外,OSPM在命名空间初始化的开始时无条件地评估\ _SB命名空间下的_INI对象(如果存在)。</p>
<h2 id="REG-Region"><a href="#REG-Region" class="headerlink" title="_REG(Region)"></a>_REG(Region)</h2><p>OS运行_REG控制方法以通知AML代码操作区域的可用性的改变。当操作区域处理程序不可用时,AML无法访问该区域中的数据字段。 (操作区域写入将被忽略,读取将返回不确定的数据。)</p>
<p>参数:(2)</p>
<p>Arg0 - 包含操作区域地址空间ID的整数</p>
<p>Arg1 - 包含处理程序连接代码的整数</p>
<p>0 - 断开处理程序<br>1 - 连接处理程序</p>
<p>返回值:<br>没有</p>
<p>除了下面所示的情况,控制方法必须假设所有操作区域都不可访问,直到执行_REG(RegionSpace,1)方法。一旦对特定操作区域执行了_REG,指示操作区域处理程序就绪,则控制方法可以访问操作区域中的字段。相反,当_REG方法执行未指示操作区域处理程序就绪时,控制方法不得访问操作区域中的字段。</p>
<p>例如,在嵌入式控制器驱动程序就绪之前,控制方法无法访问嵌入式控制器。一旦OSPM运行_REG(EmbeddedControl,1),控制方法就可以访问嵌入式控制器地址空间中的操作区域。此外,如果OSPM执行_REG(EmbeddedControl,0),控制方法必须停止访问嵌入式控制器地址空间中的操作区域。</p>
<p>此规则的例外情况如下:</p>
<ol>
<li>OSPM必须保证以下操作区域始终可访问:</li>
</ol>
<ul>
<li>包含_BBN对象的PCI根总线上的PCI_Config操作区域。</li>
<li>SystemIO操作区域。</li>
<li>访问系统地址映射报告接口返回的内存时的SystemMemory操作区域。</li>
</ul>
<ol>
<li>OSPM必须通过ECDT中描述的嵌入式控制器访问嵌入式控制器操作区域,然后才能执行任何控制方法。 在OSPM运行_REG(EmbeddedControl,0)后,这些操作区域可能无法访问。将_REG放置在与操作区域声明相同的范围中。 当在该范围中声明的操作区域可供使用时,OS将在给定范围中运行_REG。</li>
</ol>
<p>Example:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">Scope(\_SB.PCI0) { OperationRegion(OPR1, PCI_Config, ...) Method(_REG, 2) {...} // OSPM在PCIO操作区域处理程序时执行此操作 // 状态更改 Device(PCI1) { Method(2) {...} Device(ETH0) { OperationRegion(OPR2, PCI_Config, ...) Method(_REG,2) {...} }</div><div class="line"> } Device(ISA0) { OperationRegion(OPR3, SystemIO, ...) Method(_REG, 2) {...} // OSPM在ISAO操作区域处理程序时执行此操作 // 状态更改 Device(EC0) { Name(_HID, EISAID("PNP0C09")) OperationRegion(OPR4, EmbeddedControl, ...) Method(_REG, 2) {...} // OSPM在EC操作区域执行此操作 }</div><div class="line"> }}</div></pre></td></tr></table></figure>
<p>当PCI0操作区域处理程序就绪时,OSPM将运行在PCI0范围中声明的_REG方法,以指示PCI0空间操作区域访问在PCI0范围内可用(换句话说,允许OPR1访问)。</p>
<p>当ISA0操作处理程序就绪时,OSPM将在ISA0作用域中运行_REG方法,以指示I / O空间操作区域访问在该范围内可用(换句话说,允许OPR3访问)。</p>
<p>最后,当嵌入式控制器操作区域处理程序就绪时,OSPM将在EC0作用域中运行_REG方法,以指示EC空间操作区域访问在EC0范围内可用(换句话说,允许OPR4访问)。</p>
<p>应当注意,一旦主控制器或桥控制器已经用总线编号编程,则PCI配置空间操作区就准备就绪。 PCI1的_REG方法将不会运行,直到PCI-PCI桥已正确配置。同时,操作系统也将运行ETH0的_REG方法,因为它的PCI配置空间也可用。当ETH0设备启动时,OS将再次运行ETH0的_REG方法。此外,当主机控制器或桥控制器被关闭或禁用时,子设备的PCI配置空间操作区域不再可用。因此,ETH0的_REG方法将在关闭时运行,并在PCI1关闭时再次运行。</p>
<p>注意:操作系统只运行与使用刚刚可用的操作区域类型的操作区域声明出现在相同范围内的_REG方法。 例如,当加载PCI总线驱动程序时,EC设备中的_REG不会运行,因为在EC下声明的操作区域不使用PCI驱动程序提供的任何操作区域类型(即配置空间,I / O ,和存储器)。</p>
]]></content>
<summary type="html">
<p><strong>有时候查看 ACPI 时候,为了熟悉他的逻辑,需要学习一些 ACPI 语法,这里是关于 ACPI 语法的备忘录。</strong></p>
<p><strong>本备忘均从 《Advanced Configuration and Power Interfac
</summary>
<category term="黑苹果" scheme="http://blog.neroxps.cn/categories/%E9%BB%91%E8%8B%B9%E6%9E%9C/"/>
<category term="黑苹果" scheme="http://blog.neroxps.cn/tags/%E9%BB%91%E8%8B%B9%E6%9E%9C/"/>
<category term="Mac" scheme="http://blog.neroxps.cn/tags/Mac/"/>
<category term="Hackintosh" scheme="http://blog.neroxps.cn/tags/Hackintosh/"/>
<category term="ASUS" scheme="http://blog.neroxps.cn/tags/ASUS/"/>
<category term="ACPI" scheme="http://blog.neroxps.cn/tags/ACPI/"/>
</entry>
<entry>
<title>华硕 VM510LI Hotpatch</title>
<link href="http://blog.neroxps.cn/2017/02/25/Hotpatch/"/>
<id>http://blog.neroxps.cn/2017/02/25/Hotpatch/</id>
<published>2017-02-24T16:00:00.000Z</published>
<updated>2017-08-09T09:33:54.000Z</updated>
<content type="html"><![CDATA[<blockquote>
<p>本笔记参考 RehabMan 指南 <a href="https://www.tonymacx86.com/threads/guide-using-clover-to-hotpatch-acpi.200137/" target="_blank" rel="external">[Guide] Using Clover to “hotpatch” ACPI</a> </p>
</blockquote>
<p>[TOC]</p>
<h2 id="Hotpatch-简述"><a href="#Hotpatch-简述" class="headerlink" title="Hotpatch 简述"></a>Hotpatch 简述</h2><p>什么是 Hotpatch? </p>
<p><strong>RehabMan 的介绍是:</strong></p>
<blockquote>
<p>That guide uses what is known as “static patching”. In order to inject patched ACPI files, we extract native ACPI, disassemble them, make changes, then recompile and place the files in ACPI/patched, so that Clover injects the patched ACPI instead of native ACPI. With the techniques detailed in this guide, the changes can be made directly to the ACPI binaries provided by BIOS, skipping the extract, disassembly, and recompilation steps.</p>
<p>该指南使用所谓的“静态修补”。 为了注入修补的ACPI文件,我们提取本地ACPI,反汇编,进行更改,然后重新编译并将文件放在ACPI / patched中,以便Clover注入修补的ACPI而不是本机ACPI。 使用本指南中详述的技术,可以直接对BIOS提供的ACPI二进制文件进行更改,跳过提取,反汇编和重新编译步骤。(翻译来自 Google 翻译)</p>
</blockquote>
<p><strong>我的理解:</strong></p>
<p>其实 Hotpatch 就是将所有修补 ACPI 文件的补丁变成一个一个模块,通过重命名主板提供的 ACPI 文件原来的 Method (方法/函数) 来禁用原有的方法,再用 SSDT 来放入我们修改后的(已修补)的 Method (方法/函数).</p>
<p>当然上面所说的是终极解决的办法,其实还有很多很简单的方法能够完成 ACPI 补丁的功能.</p>
<p>如果有兴趣可以去看看 RahabMan 帖子.</p>
<p>之前我在 DSDT 打的补丁有.</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line">"Fix _WAK Arg0 v2" </div><div class="line">"HPET Fix" </div><div class="line">"SMBUS Fix"</div><div class="line">"IRQ Fix" </div><div class="line">"RTC Fix" </div><div class="line">"OS Check Fix(Windows 7)" </div><div class="line">"OS Check Fix(Windows 8)" </div><div class="line">"Fix Mutex with non-zero SyncLevel" //对比了下 这个补丁是不需要打的</div><div class="line">"Rename GFX0 to IGPU" </div><div class="line">"Brightness fix(Haswell/Broadwell)"</div></pre></td></tr></table></figure>
<h2 id="Clover-常规补丁"><a href="#Clover-常规补丁" class="headerlink" title="Clover 常规补丁"></a>Clover 常规补丁</h2><ul>
<li><code>Fix _WAK Arg0 v2</code> → <code>ACPI > DSDT > FIX_WAK_200000</code></li>
<li><code>IRQ Fix</code> 和 <code>HPET Fix</code> → <code>ACPI > DSDT > FixHPET_0010</code> 和 <code>ACPI > DSDT > FixIPIC_0040</code></li>
<li><code>RTC Fix</code> → <code>ACPI > DSDT > FIX_RTC_20000</code></li>
</ul>
<h2 id="OS-Check-Fix(Windows-7)和-OS-Check-Fix(Windows-8)"><a href="#OS-Check-Fix(Windows-7)和-OS-Check-Fix(Windows-8)" class="headerlink" title="OS Check Fix(Windows 7)和 OS Check Fix(Windows 8)"></a>OS Check Fix(Windows 7)和 OS Check Fix(Windows 8)</h2><p>HotPatch 的方式是,将调用 _OSI 的方法重命名为 XOSI. 然后再放入 SSDT-XOSI.aml 到 Clover > ACPI > Patched</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">Comment: Change _OSI to XOSI</div><div class="line">Find: <5f4f 5349></div><div class="line">Replace: <584f 5349></div></pre></td></tr></table></figure>
<p>意思就是,将调用 _OSI 方法的地方都改成调用 XOSI,而 XOSI 方法则是从 SSDT-XOSI.aml 引入的,我们再从 XOSI 方法修补.</p>
<h2 id="Rename-GFX0-to-IGPU"><a href="#Rename-GFX0-to-IGPU" class="headerlink" title="Rename GFX0 to IGPU"></a>Rename GFX0 to IGPU</h2><p>和上面重命名方法一样</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">Comment: Rename GFX0 to IGPU</div><div class="line">Find: <4746 5830></div><div class="line">Replace: <4947 5055></div></pre></td></tr></table></figure>
<h2 id="Brightness-fix-Haswell-Broadwell"><a href="#Brightness-fix-Haswell-Broadwell" class="headerlink" title="Brightness fix(Haswell/Broadwell)"></a>Brightness fix(Haswell/Broadwell)</h2><p>这个补丁方法</p>
<ol>
<li>GFX 重命名为 IGPU,上一节补丁已经应用了.</li>
<li>放入 SSDT-PNLF.aml</li>
<li>SSDT-Config.aml 需要定义 BKLT 的值为 0.</li>
</ol>
<h2 id="USB3-PRW-0X6D-instant-wake"><a href="#USB3-PRW-0X6D-instant-wake" class="headerlink" title="USB3_PRW 0X6D(instant wake)"></a>USB3_PRW 0X6D(instant wake)</h2><p>这个补丁方法,的方法遇上面的不太一样.</p>
<p><strong>补丁片段</strong></p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line"># some _PRW have three entries in the Package </div><div class="line">into device name_adr 0x001D0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched;</div><div class="line"></div><div class="line"># 找到设备名称地址 0x001D0000 然后移除该设备的 _PRW 方法.</div><div class="line"></div><div class="line"># seems to work better if _PRW is present, but returns 0 (original was 3) for sleep state</div><div class="line">into device name_adr 0x001D0000 insert begin Name(_PRW, Package() { 0x6D, 0 }) end;</div><div class="line"></div><div class="line"># 找到设备名称地址 0x001D0000 输入变量名 _PRW 变量内容 { 0x6D, 0 }</div><div class="line"></div><div class="line">PS: 以上纯属猜测,本人未学习过 IASL 的编程语法,全靠蒙,如果错了请指正.</div></pre></td></tr></table></figure>
<p> 这样修改后,USB 总线 EHC1和 EHC2 设备中没有了 _PRW 方法了,直接变成了 _PRW 变量. </p>
<p> 至于为何需要这样改,我并不清楚,这必须了解 USB 导致睡眠唤醒的代码原理,我看不懂.但是看补丁的修改方法还是会的.</p>
<p> 那么将上面的补丁换成 Hotpatch 应该如何表现呢?</p>
<p> 搜索了下, DSDT 中还有非常多的 _PRW 方法,他们遍布了整个 DSDT 的各种设备,如果还是使用简单的改名是不可靠的.</p>
<p> 因为 Clover 的 Patches 是搜索 DSDT 的二进制版本进行修补,二进制中无法识别整个_PRW 方法是否属于 USB 设备下的,也就是是否属于 EHC1 EHC2 的设备,那么是否就没办法用 Hotpatch 方法来修补这个问题呢?</p>
<p> 我们来看看被补丁修补的源代码是什么样的</p>
<p> 下面是 EHC1 的 _PRW 方法</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake</div><div class="line">{</div><div class="line"> Return (GPRW (0x6D, 0x03))</div><div class="line">}</div></pre></td></tr></table></figure>
<p>下面是 EHC2 的 _PRW 方法</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake</div><div class="line">{</div><div class="line"> Return (GPRW (0x6D, 0x03))</div><div class="line">}</div></pre></td></tr></table></figure>
<p>下面是 XHC 的 _PRW 方法</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake</div><div class="line">{</div><div class="line"> Return (GPRW (0x6D, 0x03))</div><div class="line">}</div></pre></td></tr></table></figure>
<p>我们可以发现我们补丁修改的每个 _PRW 方法都会调用一个方法 GPRW,并且调用 GPRW 方法的变量内容都是 0X6D.</p>
<p>再看看 RehabMan 写的 SSDT-PRW.dsl 内容</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div></pre></td><td class="code"><pre><div class="line">// For solving instant wake by hooking GPRW or UPRW</div><div class="line"></div><div class="line">DefinitionBlock("", "SSDT", 2, "hack", "PRW", 0)</div><div class="line">{</div><div class="line"> External(XPRW, MethodObj)</div><div class="line"></div><div class="line"> // In DSDT, native GPRW is renamed to XPRW with Clover binpatch.</div><div class="line"> // (or UPRW to XPRW)</div><div class="line"> // As a result, calls to GPRW (or UPRW) land here.</div><div class="line"> // The purpose of this implementation is to avoid "instant wake"</div><div class="line"> // by returning 0 in the second position (sleep state supported)</div><div class="line"> // of the return package.</div><div class="line"> Method(GPRW, 2)</div><div class="line"> {</div><div class="line"> If (0x6d == Arg0) { Return (Package() { 0x6d, 0, }) } //检查第一个变量是否为 0X6D 如果结果为真,返回 { 0x6d, 0, }</div><div class="line"> If (0x0d == Arg0) { Return (Package() { 0x0d, 0, }) } //检查第一个变量是否是 0X0D 如果结果为真,返回 { 0x0d, 0, }</div><div class="line"> Return (XPRW(Arg0, Arg1)) //如果上述都不对,则转跳到 XPRW方法 (函数为转跳过来的值)</div><div class="line"> }</div><div class="line"> Method(UPRW, 2)</div><div class="line"> {</div><div class="line"> If (0x6d == Arg0) { Return (Package() { 0x6d, 0, }) }</div><div class="line"> If (0x0d == Arg0) { Return (Package() { 0x0d, 0, }) }</div><div class="line"> Return (XPRW(Arg0, Arg1))</div><div class="line"> }</div><div class="line">}</div><div class="line">//EOF</div></pre></td></tr></table></figure>
<p>上面的逻辑很清晰了, 其实就是要将我们需要改的地方,直接用代码发回我们希望他得到的变量,那么我们就不必想如何识别哪些是 USB 的 _PRW 方法了.</p>
<p>Hotpatch 我觉得就是,复杂的逻辑交给 ASL 代码来解决, Clover 的 Patch 只需要修改源代码的调用即可.</p>
<p>那么上面多了个 XPRW 是什么东东?为啥其余调用 GPRW 方法都调用他呢?</p>
<p>这个就是 Clover 需要做的,我要将所有原来调用 GPRW 方法的都调用到这个 SSDT-PRW 来,原来的 GPRW 我们更名为 XPRW.</p>
<p>明白了吧?所有代码都经过上面的逻辑,最终跑回被我们更名为 XPRW 的方法(也就是原来的GPRW 方法).</p>
<p>故此应用这个 SSDT 之前,我们需要将 DSDT 原来的 GPRW 方法重命名为 XPRW 方法</p>
<p>但是由遇到了一个问题,如何定位 GPRW 方法在二进制文件 aml 中的位置呢?</p>
<blockquote>
<p>小笔记: aml 是 ASL 编程语言编译后的二进制文件,但是我们一般反编译或者 Patch都是讨论十六进制,因为每8个二进制代表一个字符</p>
</blockquote>
<p>RehabMan 在 <a href="https://www.tonymacx86.com/threads/guide-using-clover-to-hotpatch-acpi.200137/" target="_blank" rel="external">[Guide] Using Clover to “hotpatch” ACPI</a> <strong>Rename and Replace</strong> 章节有讲到这个问题</p>
<p>大概的意思就是因为不同主板可能情况不同,我们需要使用 <a href="https://github.com/ridiculousfish/HexFiend" target="_blank" rel="external">Hex Fiend</a> 这样的软件来验证 GPRW 方法的十六进制代码.</p>
<p>方法就是用 Hex Fiend 打开 DSDT 的 aml 文件,然后搜索 GPRW, 你会看到有很多 GPRW, 我的 GPRW 方法在 DSDT 的最下面,所以我直接拉到最下面反向搜索.</p>
<p>最终找到以下十六进制代码</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">47 50 52 57 02 GPRW</div></pre></td></tr></table></figure>
<p>再看看 GPRW 的十六进制代码是怎么样的?</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">neros-MBP:<span class="built_in">test</span> nero$ <span class="built_in">echo</span> -n GPRW|xxd</div><div class="line">00000000: 4750 5257 GPRW</div></pre></td></tr></table></figure>
<p>奇怪了,为何我在上面列举的代码多了一个 02 ?</p>
<p>我们看看原来 GPRW 方法源代码</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div></pre></td><td class="code"><pre><div class="line">Method (GPRW, 2, NotSerialized)</div><div class="line">{</div><div class="line"> Store (Arg0, Index (PRWP, Zero))</div><div class="line"> Store (ShiftLeft (SS1, One), Local0)</div><div class="line"> Or (Local0, ShiftLeft (SS2, 0x02), Local0)</div><div class="line"> Or (Local0, ShiftLeft (SS3, 0x03), Local0)</div><div class="line"> Or (Local0, ShiftLeft (SS4, 0x04), Local0)</div><div class="line"> If (And (ShiftLeft (One, Arg1), Local0))</div><div class="line"> {</div><div class="line"> Store (Arg1, Index (PRWP, One))</div><div class="line"> }</div><div class="line"> Else</div><div class="line"> {</div><div class="line"> ShiftRight (Local0, One, Local0)</div><div class="line"> FindSetLeftBit (Local0, Index (PRWP, One))</div><div class="line"> }</div><div class="line"></div><div class="line"> Return (PRWP)</div><div class="line">}</div></pre></td></tr></table></figure>
<p>看到了吧,方法名称紧挨着就是2,这个2就是 02.</p>
<p><strong>发现下面的方法好像并不是所有都这样,需要验证.</strong></p>
<p><del>根据上述帖子内容,aml 编译后会留下一个位置符来定义这个前面这个字符到底是方法,还是变量,还是设备.</del></p>
<p><del>根据我观察所得,(不同的 ASL 版本或者不同电脑获得的位置符号未必相同)</del></p>
<p>~~<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line">Method 位置符号是 06 [xx xx xx xx]</div><div class="line">Name 位置符号是 08 [xx xx xx xx]</div><div class="line">```~~</div><div class="line"></div><div class="line">~~搜索 `06 47 50 52 57`~~</div><div class="line"></div><div class="line">~~一样可以定位到 GPRW 方法上,而且这个代码是唯一的,因为整个 DSDT 里面只有一个 GPRW 函数.~~</div><div class="line"></div><div class="line">**翻看 RM 的帖子,再验证了下,发现一个更好的规律和方法**</div><div class="line"></div><div class="line">将我们的 DSDT.dsl 文件使用如下命令编译.</div></pre></td></tr></table></figure></p>
<p>iasl -l DSDT.dsl<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">它会产生两个文件</div><div class="line"></div><div class="line">* DSDT.aml 编译后文件</div><div class="line">* DSDT.lst 混合列表文件</div><div class="line"></div><div class="line">用文字编辑软件打开 DSDT.lst, 会发现机械码和 iASL 代码混合在一齐,这个就是一个翻译文件一样,列举了各种代码的机械码模式,这样我们就可以更好的找到我们需要打补丁的代码原来是怎么样的.</div><div class="line"></div><div class="line">例如:我们需要将 `Method (TACH,1` 的方法重命名为 `Method(XACH,1` 来使得 TACH 方法失效,再注入 SSDT 中写入 TACH 方法,来代替它.</div><div class="line"></div><div class="line">那么我只需要搜索 **Method (TACH,1** 就能找到他机械码的模样.</div></pre></td></tr></table></figure></p>
<p> 22490: }<br> 22492: Method (TACH, 1, Serialized)</p>
<p>00015565: 14 40 06 54 41 43 48 09 “[email protected].”<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">那么我们补丁就可以这样写</div></pre></td></tr></table></figure></p>
<p>Find:14 40 06 54 41 43 48 09<br>Replace:14 40 06 58 41 43 48 09<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">将我们字符转换成 Hex 形式可以用如下命令</div></pre></td></tr></table></figure></p>
<p>neros-MBP:~ nero$ echo -n TACH |xxd<br>00000000: 5441 4348 TACH<br>neros-MBP:~ nero$ echo -n XACH |xxd<br>00000000: 5841 4348 XACH<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">**小结**</div><div class="line"></div><div class="line">说了那么多,这个 USB3_PRW 0X6D(instant wake) 唤醒补丁的 Hotpatch 的方法就是</div><div class="line"></div><div class="line">1. 将 DSDT 的 GPRW 方法重命名为 XPRW</div><div class="line">2. 放入 RehabMan 写的 SSDT-PRW.aml 到 Clover > ACPI > patch </div><div class="line"></div><div class="line">**PS: 后来测试发现开机的时候系统日志会提示没有找到 UPRW ,这个是因为 SSDT-PRW.aml 包含了 UPRW 这个方法,而这个方法对我来说是没用的,故此放入 SSDT-PRW.aml 后如果不想出现 ACPI Error 的话,最好确认下自己的唤醒是调用 GPRW 还是 UPRW,然后将另一个方法注释掉.**</div><div class="line"></div><div class="line">## SMBUS Fix</div><div class="line"></div><div class="line">这个补丁就是在 SBUS 加入 BUS0 设备,只需要放入 SSDT-SMBUS.aml 即可.</div><div class="line"></div><div class="line">## Rename B0D3 to HDAU</div><div class="line"></div><div class="line">先将 B0D3 重命名为 HDAU</div></pre></td></tr></table></figure></p>
<p>Comment: change B0D3 to HDAU, optionally pair with SSDT-HDAU.aml<br>Find: 42304433<br>Replace: 48444155<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">再放入 SSDT-HDAU.aml</div><div class="line"></div><div class="line">**注意修改 layout-id 的值为你声卡的 layout-id 值,我声卡的 layout-id 是4**</div><div class="line"></div><div class="line">```iASL</div><div class="line">// Automatic injection of HDAU properties</div><div class="line"></div><div class="line">// Note: Only for Haswell and Broadwell</div><div class="line"></div><div class="line">DefinitionBlock("", "SSDT", 2, "hack", "HDAU", 0)</div><div class="line">{</div><div class="line"> External(_SB.PCI0.HDAU, DeviceObj)</div><div class="line"> External(RMCF.AUDL, IntObj)</div><div class="line"></div><div class="line"> // inject properties for audio</div><div class="line"> Method(_SB.PCI0.HDAU._DSM, 4)</div><div class="line"> {</div><div class="line"> If (CondRefOf(\RMCF.AUDL)) { If (Ones == \RMCF.AUDL) { Return(0) } }</div><div class="line"> If (!Arg2) { Return (Buffer() { 0x03 } ) }</div><div class="line"> Local0 = Package()</div><div class="line"> {</div><div class="line"> "layout-id", Buffer(4) { 4, 0, 0, 0 }, //需要注意修改此 layout-id 值</div><div class="line"> "hda-gfx", Buffer() { "onboard-1" },</div><div class="line"> }</div><div class="line"> If (CondRefOf(\RMCF.AUDL))</div><div class="line"> {</div><div class="line"> CreateDWordField(DerefOf(Local0[1]), 0, AUDL)</div><div class="line"> AUDL = \RMCF.AUDL</div><div class="line"> }</div><div class="line"> Return(Local0)</div><div class="line"> }</div><div class="line">}</div><div class="line">//EOF</div></pre></td></tr></table></figure></p>
<h2 id="ApplePS2SmartTouchPad-驱动的-Fn-按键补丁"><a href="#ApplePS2SmartTouchPad-驱动的-Fn-按键补丁" class="headerlink" title="ApplePS2SmartTouchPad 驱动的 Fn 按键补丁"></a>ApplePS2SmartTouchPad 驱动的 Fn 按键补丁</h2><p>这个补丁需要打上 Fn 功能键才能调整亮度,我们先看看补丁都干了些什么</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div></pre></td><td class="code"><pre><div class="line"># Patch by EMlyDinEsH (OSXLatitude)</div><div class="line"># Enables Fn brightness keys to work with my kext AsusNBFnKeys</div><div class="line"></div><div class="line"># Replacing method _Q0E with code for Brightness down key to work</div><div class="line">into Method label _Q0E replace_content begin </div><div class="line"> If (ATKP)\n</div><div class="line"> {\n</div><div class="line"> ^^^^ATKD.IANE (0x20)\n</div><div class="line"> }</div><div class="line">end;</div><div class="line"></div><div class="line"># Replacing method _Q0F with code for Brightness up key to work</div><div class="line">into Method label _Q0F replace_content begin </div><div class="line"> If (ATKP)\n</div><div class="line"> {\n</div><div class="line"> ^^^^ATKD.IANE (0x10)\n</div><div class="line"> }</div><div class="line">end;</div></pre></td></tr></table></figure>
<p>上面这个补丁是将 _Q0E 方法和 _Q0F 方法的内容替换如下</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div></pre></td><td class="code"><pre><div class="line">Method (_Q0E, 0, NotSerialized) // _Qxx: EC Query</div><div class="line">{</div><div class="line"> </div><div class="line"> If (ATKP)</div><div class="line"> {</div><div class="line"> ^^^^ATKD.IANE (0x20)</div><div class="line"> }</div><div class="line"></div><div class="line">}</div><div class="line"></div><div class="line">Method (_Q0F, 0, NotSerialized) // _Qxx: EC Query</div><div class="line">{</div><div class="line"> </div><div class="line"> If (ATKP)</div><div class="line"> {</div><div class="line"> ^^^^ATKD.IANE (0x10)</div><div class="line"> }</div><div class="line"></div><div class="line">}</div></pre></td></tr></table></figure>
<p>参考章节 USB3_PRW 0X6D(instant wake) 的方法.</p>