Logo

Personal Ops Runbook

Personal runbook covering infrastructure operations for Cloud, Kubernetes, OpenStack, and Ceph environments. Includes deployment and teardown procedures, node management, cluster monitoring setup, and incident response workflows compiled from day-to-day operational work. Intended strictly for personal reference — configurations and scripts are environment-specific and not guaranteed to work as-is elsewhere.

Sửa lỗi audio với AppleALC


Kiểm tra bằng lệnh Kextstat.

Cách sửa lỗi âm thanh trên PC chạy macOS sử dụng Lilu và AppleALC. Để bắt đầu, chúng ta sẽ giả sử bạn đã cài đặt thành công Lilu và AppleALC.

image

Nếu bạn không chắc chắn chúng đã được cài đúng cách hay chưa, bạn có thể chạy lệnh sau trong Terminal để kiểm tra (điều này cũng sẽ kiểm tra xem AppleHDA đã được tải hay chưa vì nếu không có AppleHDA, thì AppleALC sẽ không có gì để sửa lỗi):

$ kextstat | grep -E "AppleHDA|AppleALC|Lilu"

Nếu cả ba tên “AppleHDA,” “AppleALC,” và “Lilu” đều xuất hiện trong kết quả, thì bạn đã làm đúng. Đồng thời, đảm bảo rằng VoodooHDA không tồn tại trên máy tính của bạn vì nếu có thì nó sẽ gây xung đột với AppleALC.

Xác định Layout ID cho âm thanh.

Phần này sẽ hướng dẫn cho các bạn xác định Layout ID cho âm thanh trên máy tính của bạn.

Kiểm tra codec âm thanh trên máy tính của bạn, ví dụ codec của bạn là ALC1220. Để xác minh codec, bạn có một số cách:

Kiểm tra trang thông số kỹ thuật và hướng dẫn của bo mạch chủ (mainboard) của bạn.

Kiểm tra trong Device Manager trên hệ điều hành Windows.

Sử dụng phần mềm HWInfo64 trên Windows. Đảm bảo bỏ chọn tùy chọn Summary-only và Sensors-only khi mở ứng dụng này để có thể xem chi tiết thông tin.

Sử dụng phần mềm AIDA64 Extreme trên Windows.

Trên hệ điều hành Linux, bạn có thể sử dụng lệnh “cat” trong Terminal để kiểm tra:

cat /proc/asound/card0/codec#0 | less

Sau khi xác định được codec của bạn, bạn cần tra cứu Layout ID tương ứng từ danh sách codec được hỗ trợ bởi AppleALC. Với danh sách này bạn có thể được tìm thấy trên trang web của AppleALC.

Vendor Codec Revisions and layouts MinKernel MaxKernel
AnalogDevices AD1884 layout 11 9 (10.5)
AnalogDevices AD1984 0x100400, layout 11 13 (10.9)
AnalogDevices AD1984A 0x100400, layout 11, 13, 44 13 (10.9)
AnalogDevices AD1988A layout 12 13 (10.9)
AnalogDevices AD1988B layout 5, 7, 12 13 (10.9)
AnalogDevices AD2000B layout 5, 7 13 (10.9)
Realtek ALC1150 0x100001, layout 1, 2, 3, 5, 7, 99 12 (10.8)
Realtek ALC1220 0x100101, 0x100003, layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 17, 18, 20, 21, 25, 27, 28, 29, 30, 34, 35, 98, 99, 100 12 (10.8)
Realtek ALC215 0x100002, layout 18 13 (10.9)
Realtek ALC221 0x100003, 0x100103, layout 11, 15, 88 12 (10.8)
Realtek ALC222 0x100001, layout 11, 12 12 (10.8)
Realtek ALC225/ALC3253 layout 28, 30, 33, 90 13 (10.9)
Realtek ALC230 layout 13, 20 13 (10.9)
Realtek ALC233/ALC3236 0x100003, layout 3, 4, 5, 13, 21, 27, 28, 29, 32, 33 13 (10.9)
Realtek ALC235 layout 3, 8, 11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 24, 28, 29, 33, 35, 36, 37, 72, 88, 99 13 (10.9)
Realtek ALC236 0x100001, 0x100002, layout 3, 11, 12, 13, 14, 15, 16, 17, 18, 19, 23, 36, 54, 55, 69, 99 13 (10.9)
Realtek ALC245 layout 11, 12, 13 13 (10.9)
Realtek ALC255/ALC3234 layout 3, 11, 12, 13, 15, 17, 18, 20, 21, 22, 23, 27, 28, 29, 30, 31, 37, 66, 69, 71, 82, 86, 96, 99, 100, 255 13 (10.9)
Realtek ALC256/ALC3246 0x100002, layout 5, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 23, 24, 28, 33, 56, 57, 66, 67, 68, 69, 70, 76, 77, 88, 95, 97, 99 13 (10.9)
Realtek ALC257 0x100001, layout 11, 18, 86, 96, 97, 99, 100, 101 13 (10.9)
Realtek ALC260 layout 11, 12 13 (10.9)
Realtek ALC262 0x100100, 0x100302, 0x100202, layout 7, 11, 12, 13, 14, 28, 66 12 (10.8)
Realtek ALC268 layout 3, 11 9 (10.5)
Realtek ALC269/ALC271X 0x100203, 0x100004, 0x100202, 0x100100, layout 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, 32, 33, 34, 35, 36, 38, 39, 40, 44, 45, 47, 55, 58, 66, 69, 76, 77, 88, 91, 93, 99, 100, 111, 127, 128, 138, 188 12 (10.8)
Realtek ALC270 0x100100, layout 3, 4, 21, 27, 28 13 (10.9)
Realtek ALC272 0x100001, 0x100002, layout 3, 12, 18, 21 13 (10.9)
Realtek ALC274 0x100004, layout 21, 28, 35, 39 13 (10.9)
Realtek ALC275 0x100008, 0x100005, layout 3, 13, 28 13 (10.9)
Realtek ALC280 layout 3, 4, 11, 13, 15, 16, 17, 18, 21 13 (10.9)
Realtek ALC282 0x100003, layout 3, 4, 13, 21, 22, 27, 28, 29, 30, 41, 43, 51, 69, 76, 86, 127 12 (10.8)
Realtek ALC283 layout 1, 3, 11, 12, 13, 15, 44, 45, 66, 73, 88 13 (10.9)
Realtek ALC284 layout 3 13 (10.9)
Realtek ALC285 layout 11, 21, 31, 52, 61, 66, 71, 88 13 (10.9)
Realtek ALC286 0x100002, 0x100003, layout 3, 11 13 (10.9)
Realtek ALC287 layout 11, 21 13 (10.9)
Realtek ALC288 layout 3, 13, 23 13 (10.9)
Realtek ALC289 layout 11, 12, 15, 23, 33, 69, 87, 93, 99 13 (10.9)
Realtek ALC290/ALC3241 layout 3, 4, 10, 15, 28 13 (10.9)
Realtek ALC292 layout 12, 15, 18, 28, 32, 55, 59 13 (10.9)
Realtek ALC293 layout 11, 28, 29, 30, 31 13 (10.9)
Realtek ALC294 layout 11, 12, 13, 15, 21, 22, 28, 44, 66, 99 13 (10.9)
Realtek ALC295 layout 1, 3, 11, 13, 14, 15, 21, 22, 23, 24, 28, 77 13 (10.9)
Realtek ALC298 0x100101, 0x100103, layout 3, 11, 13, 16, 21, 22, 28, 29, 30, 32, 33, 47, 66, 72, 99 13 (10.9)
Realtek ALC299 0x100002, layout 21, 22 13 (10.9)
Realtek ALC623 0x100000, layout 13, 21 13 (10.9)
Realtek ALC662 0x100101, 0x100300, layout 5, 7, 11, 12, 13, 15, 16, 17, 18, 19, 66 13 (10.9)
Realtek ALC663 0x100001, 0x100002, layout 3, 4, 15, 28, 99 13 (10.9)
Realtek ALC665 layout 12, 13 13 (10.9)
Realtek ALC668 0x100003, layout 3, 20, 27, 28, 29 13 (10.9)
Realtek ALC670 0x100002, layout 12 13 (10.9)
Realtek ALC671 layout 12, 15, 16, 88 13 (10.9)
Realtek ALC700 layout 11 13 (10.9)
Realtek ALC882 layout 5, 7 13 (10.9)
Realtek ALC883 0x100002, layout 7, 20 13 (10.9)
Realtek ALC885 0x100101, 0x100103, layout 1, 12, 13, 15, 48, 50, 53, 56, 58, 60, 62, 63, 64, 65, 67, 70, 73, 74 13 (10.9)
Realtek ALC887 0x100202, 0x100302, layout 1, 2, 3, 5, 7, 11, 12, 13, 17, 18, 20, 33, 40, 50, 52, 53, 87, 99 13 (10.9)
Realtek ALC888/ALC1200 0x100001, 0x100101, 0x100202, 0x100302, layout 1, 2, 3, 4, 5, 7, 11, 27, 28, 29 13 (10.9)
Realtek ALC889 0x100004, layout 1, 2, 3, 11, 12 13 (10.9)
Realtek ALC891/ALC867 0x100002, layout 11, 13 12 (10.8)
Realtek ALC892 0x100302, layout 1, 2, 3, 4, 5, 7, 12, 15, 16, 17, 18, 20, 22, 23, 28, 31, 32, 90, 92, 97, 99, 100 13 (10.9)
Realtek ALC897 0x100402, 0x100500, layout 11, 12, 13, 21, 23, 66, 69, 77, 98, 99 13 (10.9)
Realtek ALC898/ALC899 0x100003, layout 1, 2, 3, 5, 7, 11, 13, 65, 66, 98, 99, 101 13 (10.9)
Realtek ALCS1200A 0x100001, layout 1, 2, 3, 7, 11, 49, 50, 51, 52, 69 12 (10.8)
Realtek ALCS1220A 0x100101, 0x100003, layout 1, 2, 3, 5, 7, 8, 11, 13, 15, 20, 21 12 (10.8)
Creative CA0132 0x100918, layout 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 99 13 (10.9)
CirrusLogic CS4206 0x100103, 0x100301, 0x100302, layout 1, 3, 9, 11, 13, 18, 24, 28, 29, 31, 32, 33, 35, 39, 61, 71, 75, 76, 77, 78, 79, 81, 84, 91, 98, 99
CirrusLogic CS4210 0x100101, layout 13 13 (10.9)
CirrusLogic CS4213 0x100100, layout 28 13 (10.9)
Conexant CX20561 0x100000, layout 11 13 (10.9)
Conexant CX20583 layout 3 13 (10.9)
Conexant CX20585 layout 3, 13 13 (10.9)
Conexant CX20588 layout 3 13 (10.9)
Conexant CX20590 0x100000, 0x100002, 0x100003, layout 3, 12, 13, 14, 28 13 (10.9)
Conexant CX20632 0x100100, layout 20, 21, 23, 28 13 (10.9)
Conexant CX20641 layout 11, 13 13 (10.9)
Conexant CX20642 layout 11, 13 13 (10.9)
Conexant CX20722 layout 3 13 (10.9)
Conexant CX20724 layout 3, 13 13 (10.9)
Conexant CX20751/CX20752 0x100100, 0x100001, layout 3, 21, 28 13 (10.9)
Conexant CX20753/CX20754 layout 3, 14, 15, 21 13 (10.9)
Conexant CX20755 layout 3 13 (10.9)
Conexant CX20756 layout 3, 13 13 (10.9)
Conexant CX20757 layout 3, 28 13 (10.9)
Conexant CX8050 layout 3, 13 13 (10.9)
Conexant CX8070/CX11880 layout 15, 21 13 (10.9)
Conexant CX8150 layout 21, 22 13 (10.9)
Conexant CX8200 layout 3, 15, 21, 23, 80 13 (10.9)
Conexant CX8400 layout 12, 13 13 (10.9)
IDT IDT92HD66C3/65 layout 3 13 (10.9)
IDT IDT92HD71B7X layout 3 13 (10.9)
IDT IDT92HD73C1X5 layout 19, 21 13 (10.9)
IDT IDT92HD73E1X5 layout 15 13 (10.9)
IDT IDT92HD75B2X5 layout 3 13 (10.9)
IDT IDT92HD75B3X5 layout 3 13 (10.9)
IDT IDT92HD81B1C5 layout 3, 11 13 (10.9)
IDT IDT92HD81B1X5 layout 3, 11, 12, 20, 21, 28 13 (10.9)
IDT IDT92HD87B1 layout 3 13 (10.9)
IDT IDT92HD87B1/3 0x100205, layout 12, 13 13 (10.9)
IDT IDT92HD87B2/4 layout 13 13 (10.9)
IDT IDT92HD90BXX layout 3, 12 13 (10.9)
IDT IDT92HD91BXX 0x100102, 0x100303, layout 3, 12, 13, 33, 84 13 (10.9)
IDT IDT92HD93BXX 0x100203, layout 12 13 (10.9)
IDT IDT92HD95 layout 11, 12, 14 13 (10.9)
IDT IDT92HD99BXX layout 3 13 (10.9)
SigmaTel STAC9200 0x102201, layout 11 8 (10.4)
SigmaTel STAC9205 0x100204, layout 11 8 (10.4)
SigmaTel STAC9872AK 0x100201, layout 12 12 (10.8)
VIA VT1705 0x100000, layout 21 13 (10.9)
VIA VT1802 0x100000, layout 3, 33, 65 13 (10.9)
VIA VT2020/VT2021 0x100100, layout 5, 7, 9, 13 13 (10.9)

Controllers patches

Vendor Patch for not native Device Model MinKernel MaxKernel
NVIDIA NVIDIA HDMI for GK107 in 10.13.4+ 0x0E1B 17 (10.13)
NVIDIA NVIDIA HDMI for GK208 in 10.13.4+ 0x0E0F 17 (10.13)
NVIDIA NVIDIA HDMI for GM200 in 10.13.4 – 10.13.6 0x0FB0 17 (10.13) 17 (10.13)
NVIDIA NVIDIA HDMI for GP108 in 10.13.4 – 10.13.6 0x0FB8 17 (10.13) 17 (10.13)
NVIDIA NVIDIA HDMI for GP107 in 10.13.4 – 10.13.6 0x0FB9 17 (10.13) 17 (10.13)
NVIDIA NVIDIA HDMI for GM206 in 10.13.4 – 10.13.6 0x0FBA 17 (10.13) 17 (10.13)
NVIDIA NVIDIA HDMI for GM204 in 10.13.4 – 10.13.6 0x0FBB 17 (10.13) 17 (10.13)
NVIDIA NVIDIA HDMI for GM107 in 10.13.4 – 10.13.6 0x0FBC 17 (10.13) 17 (10.13)
NVIDIA NVIDIA HDMI for GP102 in 10.13.4 – 10.13.6 0x10EF 17 (10.13) 17 (10.13)
NVIDIA NVIDIA HDMI for GP104 in 10.13.4 – 10.13.6 0x10F0 17 (10.13) 17 (10.13)
NVIDIA NVIDIA HDMI for GP106 in 10.13.4 – 10.13.6 0x10F1 17 (10.13) 17 (10.13)
AMD AMD R9 290X HDMI 0xAAC8 15 (10.11)
AMD AMD R9 Fury HDMI Audio 0xAAE8 15 (10.11)
AMD AMD Vega-M HDMI 0xAB08 15 (10.11)
AMDZEN AMD Zen Audio Controller 0x1457 0x1457
AMDZEN AMD Zen Audio Controller 0x1487 0x1487
AMDZEN AMD Zen Audio Controller 0x15E3 0x15E3
Intel HD4600 HDMI Audio 0x0C0C 13 (10.9)
Intel Atom Z36xxx/Z37xxx Audio Controller 0x0F04 13 (10.9)
Intel Z97 HDEF controller in 10.9 0x8CA0 13 (10.9) 13 (10.9)
Intel X99 HDEF controller 0x8D20 0x8D20 13 (10.9)
Intel X99 HDEF controller 0x8D21 0x8D21 13 (10.9)
Intel 100 Series (0xA170) Mobile PCH HD Audio 0xA170 Laptop 15 (10.11)
Intel WhiskeyLake Mobile PCH HD Audio 0x9DC8 Laptop 16 (10.12)
Intel Intel NUC8 PCH HD Audio 0x9DC8 Desktop 16 (10.12)
Intel 200 Series (0xA171) Mobile PCH HD Audio 0xA171 Laptop 15 (10.11)
Intel Intel NUC8i7HVK 200 Series PCH HD Audio 0xA171 Desktop 16 (10.12)
Intel 200 Series PCH HD Audio 0xA2F0 16 (10.12)
Intel 300 Series PCH HD Audio in 10.12 – 10.13 0xA348 16 (10.12) 17 (10.13)
Intel C620 Series PCH HD Audio 0xA1F0 19 (10.15)
Intel 400 Series(0xA3F0) PCH HD Audio 0xA3F0 19 (10.15)
Intel 400 Series PCH HD Audio 0x06C8 19 (10.15)
Intel 400 Series(0xF1C8) PCH HD Audio 0xF1C8 19 (10.15)
Intel 400 Series PCH-LP HD Audio 0x02C8 19 (10.15)
Intel Icelake Smart Sound Technology Audio Controller 0x34C8 19 (10.15)
Intel 500 Series(0xF0C8) PCH HD Audio 0xF0C8 19 (10.15)
Intel 500 Series(0x43C8) PCH HD Audio 0x43C8 17 (10.13)
Intel 600 Series(0x7AD0) PCH HD Audio 0x7AD0 19 (10.15)
Intel Alder Lake PCH-P High Definition Audio Controller (0x51C8) 0x51C8 19 (10.15)
Intel 700 Series(0x7A50) PCH HD Audio 0x7A50 19 (10.15)

Bạn có thể cập nhật các danh sách mới hơn từ trang https://github.com/acidanthera/AppleALC/wiki/Supported-codecs.

Ví dụ, nếu bạn có codec ALC1220, bạn sẽ thấy danh sách các Layout ID hỗ trợ cho codec đó như sau:

0x100003, layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 21, 27, 28, 29, 34
  • Từ danh sách này, bạn có thể biết được hai điều quan trọng:
  • Phiên bản phần cứng nào hỗ trợ (0x100003), thông thường chỉ cần quan tâm khi danh sách có nhiều phiên bản khác nhau với các Layout ID khác nhau.
  • Các Layout ID được hỗ trợ bởi codec của bạn (ví dụ: layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 21, 27, 28, 29, 34).

Hoặc ví dụ máy của mình đang sử dụng Mainboard H81 Pro BTC https://www.asrock.com/mb/intel/h81%20pro%20btc/.

image

Nếu tra theo bảng trên khi sử dụng card âm thanh là ALC662 thì bạn có thể thử các Layout ID như dưới đây.

0x100101, 0x100300, layout 5, 7, 11, 12, 13, 15, 16, 17, 18, 19, 66

Dựa trên danh sách Layout ID được hỗ trợ, bạn có thể thử các Layout ID này để xem cái nào hoạt động tốt nhất cho máy tính của bạn.

Lưu ý:
Nếu codec âm thanh của bạn là ALC 3XXX, có thể có trường hợp mã ALC này là thông tin sai lệch và chỉ khả năng nó là một tên gọi khác của drive audio, vì vậy bạn cần tìm hiểu để biết được tên thực sự của drive này.

Kiểm tra Layout ID của bạn.

Để kiểm tra các Layout ID, bạn sẽ sử dụng boot-arg alcid=xxx trong file config.plist của máy tính của bạn, trong đó xxx là mã Layout ID bạn muốn thử.

Dưới đây là hướng dẫn cơ bản:

  • Mở file config.plist trên máy tính của bạn. Thường nó nằm trong EFI hoặc Clover thư mục của hệ điều hành macOS của bạn.
  • Trong config.plist bạn điều hướng đến NVRAM (NVRAM > Add > 7C436110-AB2A-4BBB-A880-FE41995C9F82).
  • Tạo hoặc chỉnh sửa mục boot-args dưới dạng chuỗi (String) và đặt giá trị là “alcid=xxx”, trong đó xxx là mã Layout ID bạn muốn kiểm tra.
  • Ví dụ, nếu bạn muốn thử Layout ID 11, bạn sẽ đặt giá trị của boot-args là “alcid=11”.
  • Lưu và thoát khỏi file config.plist.
  • Khởi động lại máy tính của bạn và kiểm tra âm thanh xem nó đã hoạt động với Layout ID bạn đã chọn chưa. Nếu không thành công, bạn có thể thử lại với một Layout ID khác bằng cách thay đổi giá trị của boot-args.

Dưới đây là cấu trúc dẫn tới boot-args trong file config.plist.

config.plist
├── NVRAM
  ├── Add
    ├── 7C436110-AB2A-4BBB-A880-FE41995C9F82
          ├── boot-args | String | alcid=11

Nếu không có mã Layout ID nào hoạt động, bạn có thể cần tạo SSDT-HPET fixes cho hệ thống của mình. Điều này thường cần thiết trên các laptop và một số máy tính để bàn để AppleHDA hoạt động đúng cách.

Making Layout ID more permanent.

Sau khi bạn đã tìm ra Layout ID hoạt động với máy tính của bạn, bạn có thể tạo một giải pháp cố định hơn để đặt Layout ID gần giống với cách các máy Mac giống như đang sử dụng Layout ID của họ. AppleALC có một ưu tiên về cách xác định Layout ID như sau:

  • alc-id=xxx trong boot-arg: Giúp cho mục đích gỡ lỗi và ghi đè lên tất cả các giá trị khác.
  • alc-layout-id trong DeviceProperties: Nên chỉ được sử dụng trên các máy tính Apple chính hãng.
  • layout-id trong DeviceProperties: Nên sử dụng cho cả máy tính Apple và máy tính không phải của Apple.

Để bắt đầu, chúng ta cần tìm xem drive âm thanh của chúng ta nằm ở đâu trên bản đồ PCI. Đối với điều này, chúng tôi sẽ sử dụng một công cụ tiện dụng có tên gfxutil (mở cửa sổ mới) sau đó với thiết bị đầu cuối macOS:

image

Ví dụ ở máy mình.

$ /Users/hoanghd/Downloads/gfxutil-1.83b-RELEASE/gfxutil -f HDEF
00:1b.0 8086:8c20 /PCI0@0/HDEF@1B = PciRoot(0x0)/Pci(0x1B,0x0)

Sau đó thêm PciRoot này với id bố cục con vào config.plist của bạn trong DeviceProperties -> Add:

image

Lưu ý rằng AppleALC có thể chấp nhận cả số thập phân và số thập lục phân. Thông thường, sử dụng số thập lục phân là phương pháp tốt nhất vì bạn tránh các bước chuyển đổi không cần thiết.

Bạn có thể sử dụng công cụ online (nhấp để mở cửa sổ mới) hoặc sử dụng công cụ có sẵn trên terminal của MacOS. Ví dụ dưới đây là ví dụ cách chuyển đổi từ số thập phân sang số thập lục phân bằng lệnh Terminal trên macOS:

printf '%x\n' <giá trị>
image

Trong ví dụ này, bạn muốn chuyển đổi giá trị alcid=11 thành một giá trị dạng layout-id. Có hai cách để làm điều này, sử dụng dạng Data hoặc Number:

  • Sử dụng dạng Data:
    • Giá trị layout-id sẽ được biểu diễn dưới dạng HEX/Data, ví dụ: <0B000000>. Ở đây, “0B” là giá trị layout-id ở dạng số thập lục phân.
  • Sử dụng dạng Number:
    • Giá trị layout-id sẽ được biểu diễn dưới dạng Number, ví dụ: <11>. Trong trường hợp này, bạn sử dụng số thập phân trực tiếp.

Chú ý rằng giá trị HEX/Data hoặc Number cần có tổng cộng 4 byte. Ví dụ, nếu bạn có layout-id vượt qua 255, bạn cần chắc chắn rằng các byte được hoán đổi. Ví dụ: 256 sẽ trở thành 00 01 00 00.

Nếu bạn sử dụng cách chuyển đổi sang số thập phân (Decimal/Number), bạn không cần quan tâm đến việc hoán đổi byte và kích thước dữ liệu. Tuy nhiên, bạn phải loại bỏ boot-arg alcid=11 sau khi đã đặt giá trị layout-id trong DeviceProperties, vì alcid luôn có ưu tiên cao nhất và AppleALC sẽ bỏ qua các mục khác như trong DeviceProperties.

Miscellaneous issues.

Dưới đây là một số vấn đề phức tạp và cách giải quyết chúng khi sử dụng AppleALC ở các PC chạy hệ điều hành macOS hackintosh:

  • Không có Micro trên AMD:
    • Vấn đề này thường xảy ra khi sử dụng AppleALC trên các máy tính chạy chip AMD. Hiện tại, chưa có các bản vá cụ thể để hỗ trợ Micro. Một giải pháp “tốt nhất” là mua một USB DAC/Mic hoặc sử dụng phương pháp VoodooHDA.kext. Tuy nhiên, cần lưu ý rằng VoodooHDA có thể không ổn định và chất lượng âm thanh kém hơn so với AppleALC.
  • Cùng Layout ID từ Clover nhưng không hoạt động trên OpenCore:
    • Vấn đề này có thể do xung đột IRQ (Interrupt Request) giữa các thiết bị trên máy tính. Trong Clover, có một số bản vá ACPI tự động được áp dụng. Để sửa lỗi này, bạn có thể sử dụng tùy chọn FixHPET trong công cụ SSDTTime để xử lý nhiều trường hợp. Trong trường hợp lạ, khi RTC và HPET cùng sử dụng IRQ từ các thiết bị khác như USB và âm thanh, bạn có thể tham khảo ví dụ về bản vá ACPI của HP Compaq DC7900.
  • Kernel Panic khi thay đổi trạng thái nguồn trong macOS 10.15:
    • Để giải quyết sự cố Kernel Panic khi có sự thay đổi về trạng thái nguồn (power state) trong macOS 10.15, bạn có thể kích hoạt tùy chọn PowerTimeoutKernelPanic trong file config.plist của bạn.
      • Mở config.plist.
      • Điều hướng đến Kernel -> Quirks -> PowerTimeoutKernelPanic.
      • Đặt giá trị thành True.

Lưu ý rằng việc giải quyết các vấn đề phức tạp như vậy có thể yêu cầu hiểu biết sâu rộng về cách làm việc của máy tính hackintosh và có thể đòi hỏi thời gian và nỗ lực đáng kể.

Kiểm tra xem bạn sử dụng đúng kext không?

Để kiểm tra xem bạn đã cài đặt Lilu và AppleALC đúng cách hay chưa, bạn có thể thực hiện các bước sau bằng cách sử dụng Terminal. Chạy lệnh sau để kiểm tra xem các kexts (tiện ích mở rộng kernel) Lilu, AppleALC và AppleHDA có được tải và hoạt động đúng cách:

kextstat | grep -E "AppleHDA|AppleALC|Lilu"
  • Nếu tất cả ba kexts này xuất hiện trong kết quả, điều này có nghĩa rằng bạn đã cài đặt chúng đúng cách và chúng đang hoạt động.
  • Đảm bảo rằng bạn không cài đặt các kexts khác có thể gây xung đột hoặc gây sự cố. Các kexts mà bạn không nên cài đặt bao gồm:
    • RealtekALC.kext
    • CloverALC.kext
    • VoodooHDA.kext
    • HDA Blocker.kext
    • HDAEnabler#.kext (# có thể là 1, 2 hoặc 3)
  • Hãy đảm bảo rằng kext VoodooHDA không được cài đặt, vì nó có thể gây xung đột với AppleALC.

Việc kiểm tra này giúp bạn xác định xem cài đặt và tải các kexts Lilu và AppleALC đã được thực hiện đúng cách trên hệ thống của bạn. Nếu bạn thấy rằng Lilu và AppleALC không xuất hiện trong hệ thống của bạn, dưới đây là các bước bạn có thể thực hiện để khắc phục sự cố:

  • Kiểm tra file log của OpenCore: Trong file log của OpenCore, bạn có thể xem xét liệu Lilu và AppleALC có được vá (inject) vào hệ thống đúng cách hay không.
  • Ví dụ log như sau:
14:354 00:020 OC: Prelink injection Lilu.kext () - Success
14:367 00:012 OC: Prelink injection AppleALC.kext () - Success
  • Nếu bạn thấy “Success” trong log, điều này có nghĩa rằng Lilu và AppleALC đã được vá thành công. Nếu bạn thấy “Invalid Parameter” hoặc bất kỳ thông báo lỗi nào khác, điều này có thể là nguyên nhân khiến nó không hoạt động.
  • Kiểm tra thứ tự vá (injection order): Đảm bảo rằng Lilu được đặt trước AppleALC trong danh sách kexts. OpenCore sử dụng thứ tự vá để xác định thứ tự mà các kexts được vá vào kernel, vì vậy đặt Lilu trước AppleALC có thể giúp đảm bảo rằng nó được vá trước và có thể chạy đúng cách.
  • Cập nhật tất cả các kexts: Đảm bảo rằng tất cả các kexts trên hệ thống của bạn đều là phiên bản mới nhất. Điều này đặc biệt quan trọng đối với các plugin Lilu, vì phiên bản không phù hợp có thể gây ra sự cố. Hãy cập nhật kexts và xem xét sử dụng phiên bản mới nhất.
  • Ghi log vào file (file logging): Nếu bạn muốn ghi log vào file để dễ dàng theo dõi, bạn có thể tham khảo OpenCore Debugging để biết cách thiết lập file logging.

Nếu bạn thực hiện các bước trên và vẫn gặp vấn đề, bạn có thể cần tham khảo các nguồn thông tin và cộng đồng hackintosh để tìm kiếm giải pháp cụ thể cho trường hợp của bạn.

Note: Để cài đặt logging, xem tại OpenCore Debugging.

Kiểm tra xem AppleALC có được vá chính xác không.

Với AppleALC, một trong những điều dễ dàng nhất để kiểm tra xem việc vá lỗi có được thực hiện đúng hay không là xem drive âm thanh của bạn có được đổi tên chính xác hay không. Sử dụng IORegistryExplorer (mở cửa sổ mới) và xem bạn có thiết bị tên HDEF không:

image

Trong hình ảnh trên, chúng ta chú ý các điểm sau:

  • HDEF Device: Phần này cho thấy rằng quá trình đổi tên (rename) đã được thực hiện thành công và drive âm thanh đã được đặt thành HDEF. Điều này quan trọng để đảm bảo rằng AppleALC có thể tìm thấy và tương tác với thiết bị âm thanh.
  • AppleHDAController attached: Phần này cho thấy rằng drive âm thanh của Apple (AppleHDA) đã được kết nối thành công. Điều này là quan trọng để AppleALC có dữ liệu để làm việc và áp dụng các bản vá cần thiết cho hệ thống.
  • alc-layout-id: Đây là một thuộc tính (property) thể hiện rằng việc vá boot-arg/DeviceProperty đã được thực hiện thành công. Giá trị 07000000 tương ứng với một Layout ID mặc định. Chú ý rằng giá trị alc-layout-id sẽ ghi đè lên giá trị layout-id mặc định và đây sẽ là Layout ID mà AppleHDA sẽ sử dụng.
Lưu ý:
Không nên tự đổi lại tên (rename) drive âm thanh của bạn một cách thủ công, vì điều này có thể gây ra vấn đề do AppleALC đã cố gắng tiến hành các bản vá. Hãy để AppleALC hoàn thiện công việc của nó.

Hình ảnh với Layout ID chính xác.

image

Hình ảnh với Layout ID không chính xác.

image

Như bạn đã mô tả, hình ảnh ở dưới thiếu rất nhiều thiết bị AppleHDAInput, điều này ngụ ý rằng AppleALC không thể kết hợp các cổng vật lý trên hệ thống của bạn với các thiết bị mà nó có thể hiểu và đưa ra âm thanh. Điều này đồng nghĩa rằng bạn cần thực hiện một số công việc để tìm ra Layout ID (mã Layout) phù hợp cho hệ thống của bạn.

Tìm Layout ID đúng là quá trình quan trọng để đảm bảo rằng các cổng âm thanh trên máy tính của bạn hoạt động chính xác và bạn có âm thanh từ các thiết bị đầu vào và đầu ra như bạn mong muốn. Thông thường, bạn cần kiểm tra các Layout ID được hỗ trợ cho chip âm thanh của bạn và thử từng mã một để xem cái nào hoạt động tốt nhất.

Có thể cần thực hiện nhiều kiểm tra và điều chỉnh để đạt được kết quả tốt nhất. Hãy tham khảo tài liệu và nguồn thông tin của cộng đồng hackintosh để tìm hiểu cách xác định Layout ID phù hợp cho hệ thống của bạn.

Kiểm tra xem AppleHDA có phải là bản gốc hay không?

Kiểm tra xem AppleHDA có phải là bản gốc (vanilla) hay không rất quan trọng, đặc biệt đối với những người đã thay thế AppleHDA gốc bằng phiên bản tùy chỉnh. Bạn có thể sử dụng lệnh sau để kiểm tra xem AppleHDA của bạn có phải là phiên bản gốc hay không:

sudo kextcache -i / && sudo kextcache -u /

Lệnh trên sẽ kiểm tra tính hợp lệ của chữ ký (signature) cho AppleHDA. Nếu chữ ký không hợp lệ, điều này có nghĩa rằng bạn sẽ cần có một bản sao chính hãng của AppleHDA dành cho hệ thống của bạn và thay thế nó, hoặc cập nhật macOS (kexts sẽ được xóa trong quá trình cập nhật). Vấn đề này thường chỉ xảy ra khi bạn đã tự tiến hành các bản vá cho AppleHDA, vì vậy nếu đây là một cài đặt mới, thì có khả năng rất thấp bạn sẽ gặp vấn đề về chữ ký.

AppleALC hoạt động không đồng nhất.

Nếu bạn gặp tình trạng AppleALC hoạt động không đồng nhất và âm thanh không xuất ra đôi khi, có thể do điều kiện hiếm hoi khi phần cứng của bạn không được khởi tạo đúng lúc cho AppleHDAController, dẫn đến không có âm thanh. Để khắc phục vấn đề này, bạn có thể thực hiện các bước sau:

  • Xác định thời gian trễ bằng boot-args:
    • Sử dụng lệnh boot-args để chỉ định thời gian trễ. Ví dụ:
alcdelay=1000
  • Trong trường hợp này, bạn đang xác định một thời gian trễ 1000 ms (1 giây) cho AppleHDAController. Lưu ý rằng thời gian trễ ALC không được vượt quá 3000 ms.

Xác định thời gian trễ thông qua DeviceProperties (trong thiết bị HDEF):

  • Sử dụng DeviceProperties để xác định thời gian trễ. Điều này có thể thực hiện trong file config.plist của bạn.
  • Thêm thuộc tính sau vào thiết bị HDEF:
alc-delay | Number | 1000
  • Tương tự như trên, giá trị 1000 ở đây đại diện cho thời gian trễ 1000 ms.

Việc xác định thời gian trễ giúp đảm bảo rằng AppleHDAController được khởi động đúng lúc và hệ thống của bạn có thể xuất âm thanh một cách đáng tin cậy.

Trường hợp sử dụng 2 card âm thanh.

Nếu bạn đang sử dụng hai card âm thanh (ví dụ: Realtek tích hợp và một thẻ PCIe ngoại vi) và bạn muốn tránh cho AppleALC patch những thiết bị mà bạn không sử dụng hoặc không cần patch (ví dụ: thẻ PCIe gốc), bạn có thể thực hiện các bước sau. Điều này quan trọng đặc biệt nếu bạn gặp tình trạng AppleALC không patch được drive âm thanh tích hợp khi card âm thanh gắn thêm cũng tồn tại.

  • Xác định vị trí của các drive âm thanh:
    • Đầu tiên, bạn cần xác định vị trí của cả hai drive âm thanh (onboard và thẻ PCIe). Một cách dễ nhất là chạy công cụ gfxutil và tìm kiếm các ID PCI của chúng.
    • Sử dụng lệnh sau để chạy gfxutil:
/path/to/gfxutil

Sau đó, tìm kiếm PciRoot pathing cho cả hai drive. Ví dụ, bạn có thể tìm kiếm PCI ID cho thẻ PCIe Creative Sound-Blaster AE-9PE (ví dụ: 1102:0010) trong đầu ra của gfxutil để xác định PciRoot pathing của nó.

66:00.0 1102:0010 /PC02@0/BR2A@0/SL05@0 = PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0)

Từ đây chúng ta có thể thấy rõ đường dẫn PciRoot của mình là:

PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0)

Sau khi bạn đã xác định được đường dẫn PciRoot của mình, bạn có thể mở file config.plist của mình và thêm patch. Dưới đây là cách bạn có thể thực hiện điều này:

  • Mở file config.plist của bạn bằng một trình soạn thảo văn bản hoặc công cụ chỉnh sửa plist.
  • Điều hướng đến mục DeviceProperties -> Add (nếu mục này không tồn tại, bạn có thể tạo nó).
  • Thêm PciRoot (với giá trị PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0) – giá trị này phải trùng khớp với PciRoot pathing bạn đã xác định từ công cụ gfxutil).
  • Dưới PciRoot, thêm external-audio với giá trị là Data và có giá trị là 01.

Cấu trúc này trong file config.plist cho phép bạn chỉ định rằng AppleALC sẽ bỏ qua việc patch bộ điều khiển âm thanh bên ngoài. Sau khi bạn đã thêm patch này, bạn có thể lưu và đóng file config.plist, sau đó khởi động lại hệ thống của bạn. Khi bạn khởi động lại, AppleALC nên bỏ qua bộ điều khiển âm thanh bên ngoài của bạn.

DeviceProperties
| --- > Add
 | --- > PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0)
  | ----> external-audio | Data | 01

Lưu ý rằng để thực hiện việc xác định vị trí của drive âm thanh gắn thêm, bạn cần biết cả Vendor ID (ID Nhà sản xuất) và Device ID (ID Thiết bị) của card âm thanh gắn thêm. Dưới đây là một số Vendor ID phổ biến để bạn tham khảo:

  • Creative Labs: 1102
  • AsusTek: 1043

Cần lưu ý rằng thông tin ACPI và PciRoot pathing của bạn có thể khác nhau, do đó, bạn nên chú ý đến kết quả đầu ra của công cụ gfxutil của PC để xác định chính xác vị trí của drive âm thanh.

  • Mở file config.plist của bạn bằng một trình soạn thảo văn bản hoặc công cụ chỉnh sửa plist.
  • Điều hướng đến mục DeviceProperties -> Add (nếu mục này không tồn tại, bạn có thể tạo nó).
  • Thêm PciRoot với giá trị PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0) (giá trị này phải trùng khớp với PciRoot pathing bạn đã xác định từ công cụ gfxutil).
  • Dưới PciRoot, thêm external-audio với giá trị là Data và có giá trị là 01.
image

Cấu trúc này trong file config.plist cho phép bạn chỉ định rằng drive âm thanh bên ngoài không cần được patch. Sau khi bạn đã thêm patch này, bạn có thể lưu và đóng file config.plist, sau đó khởi động lại hệ thống của bạn để áp dụng cài đặt.

Những bước này giúp bạn quản lý việc patch drive âm thanh trên máy tính có nhiều card âm thanh một cách linh hoạt và tránh việc patch những drive không cần thiết.

Mất âm thanh khi khởi động lại từ Windows vào macOS.

Nếu bạn gặp vấn đề khi khởi động lại từ Windows vào macOS và âm thanh bị ngắt, có một số cách bạn có thể thử để khắc phục vấn đề này:

Thêm alctcsel=1 vào boot-args:

Bạn có thể thêm alctcsel=1 vào danh sách boot-args trong file config.plist của bạn. Điều này sẽ cố gắng sử dụng giá trị thời gian tương thích với AppleALC sau khi bạn đã khởi động lại từ Windows.

DeviceProperties
| --- > Add
 | --- > PciRoot(0x32)/Pci(0x0,0x0)/Pci(0x0,0x0)(Adjust to your device)
  | ----> alctcsel | Data | 01000000

Thêm thuộc tính alctcsel vào thiết bị âm thanh trong DeviceProperties:

Trong mục DeviceProperties của file config.plist, bạn có thể thêm thuộc tính alctcsel cho thiết bị âm thanh của bạn. Điều này có thể giúp điều chỉnh thời gian và khắc phục vấn đề âm thanh sau khi bạn khởi động lại từ Windows.

Cả hai cách trên đều giúp đảm bảo rằng âm thanh hoạt động đúng cách sau khi bạn chuyển từ Windows sang macOS. Hãy lựa chọn cách bạn thấy phù hợp nhất và thêm cấu hình tương ứng vào tệp config.plist của bạn.