- How to install Mac keyboard and trackpad drivers
- 2 Answers 2
- Preparation
- Installation
- Making the modules load at boot time — optional
- Configuring the Touchbar module
- Fixing suspend
- Possible Issues
- Debian GNU/Linux + Macbook Air 2017 (установка wifi драйверов)
- Проблема 1
- Проблема 2
- Действия после установки
- Заключение
- Is it possible to use Linux USB drivers on Mac OS X?
How to install Mac keyboard and trackpad drivers
I have recently installed Ubuntu on my Mac book Pro 2016, and noticed that the built in keyboard, and the track-pad are frozen. I have looked up how to install the drivers but I don’t understand a how to use GitHub and got lost really quick. What is the fastest way I can get these drivers installed and working? I am using an external keyboard and mouse for now but would not like to in the long run.
After spending many hours on the exact same issue, I finally ran across this link: wiki.t2linux.org/guides/dkms/#installing-modules I am using a Macbook 15,1 (15″ 2018 MBP) and Ubuntu 20.04.
2 Answers 2
Note that two of the steps (about loading the modules either at boot or immediately) are optional (and have been marked as such), and should not be necessary for Ubuntu.
Preparation
First install the dkms module
Next check that your kernel isn’t outdated (or your distribution uses different module versions from those used later) by running:
dkms status or ls -l /usr/src
If the version of apple-bce is 0.1 then uninstall the old modules (to avoid incompatibility issues):
sudo dkms uninstall -m apple-bce -v 0.1 sudo dkms uninstall -m apple-ibridge -v 0.1 sudo rm -r /usr/src/apple-bce-0.1 sudo rm -r /usr/src/apple-ibridge-0.1 sudo rm -r /var/lib/dkms/apple-bce sudo rm -r /var/lib/dkms/apple-ibridge
Installation
- Install the BCE (Buffer Copy Engine) module for Keyboard and Audio
- If you are on Arch, then use Aunali1’s apple-bce-dkms-git package
- Otherwise, run
sudo git clone https://github.com/t2linux/apple-bce-drv /usr/src/apple-bce-r183.c884d9c
PACKAGE_NAME="apple-bce" PACKAGE_VERSION="r183.c884d9c" MAKE[0]="make KVERSION=$kernelver" CLEAN="make clean" BUILT_MODULE_NAME[0]="apple-bce" DEST_MODULE_LOCATION[0]="/kernel/drivers/misc" AUTOINSTALL="yes"
- Run sudo git clone https://github.com/t2linux/apple-ib-drv /usr/src/apple-ibridge-0.1
- Run sudo dkms install -m apple-ibridge -v 0.1 . If on a live ISO, use sudo dkms install -m apple-ibridge -v 0.1 -k x.x.x-mbp instead and change x.x.x-mbp to the kernel that you have installed, as by default dkms will try to build the module for the kernel that the live ISO is using, which will most likely be older.
sudo modprobe apple_bce sudo modprobe apple_ib_tb sudo modprobe apple_ib_als
The touchbar and the keyboard should now work.
For audio some additional configuration is required, see Audio config files.
Making the modules load at boot time — optional
In Ubuntu, these should already be set:
echo "apple-bce apple-ib_tb apple-ib-als brcmfmac" >> /etc/modules-load.d/t2.conf
If you don’t want (for example) the touch bar modules, you can omit them from this command. brcmfmac is needed to use the internal Wi-Fi chip, refer to the Wi-Fi guide for details on how to set that up.
Configuring the Touchbar module
The Touchbar module offers some modes to set. In /etc/modprobe.d/apple-tb.conf , set fnmode (options apple-ib-tb fnmode=x) to one of the following options:
- 0: Only show F1-F12
- 1: Show media and brightness controls, use the fn key to switch to F1-12
- 2: Show F1-F12, use the fn key to switch to media and brightness controls
- 3: Only show media and brightness controls
- 4: Only show the escape key
Fixing suspend
#!/bin/sh if [ "$" = "pre" ]; then modprobe -r apple_ib_tb hid_apple elif [ "$" = "post" ]; then modprobe hid_apple apple_ib_tb fi
sudo chmod 755 /lib/systemd/system-sleep/rmmod_tb.sh sudo chown root:root /lib/systemd/system-sleep/rmmod_tb.sh
This unloads the Touchbar modules as they can cause issues for suspend.
Possible Issues
The apple_ib_als module can cause issues, if you find your computer hanging at shutdown, or having BCE errors at boot, try blacklisting it by running
sudo sh -c "echo blacklist apple-ib-als" >> /etc/modprobe.d/blacklist.conf
or removing it from /etc/modules-load.d/t2.conf .
Debian GNU/Linux + Macbook Air 2017 (установка wifi драйверов)
Так случилось что захотелось снести MacOS на Macbook’е Air и поставить что то более свободное и линуксовое. Макбук 2017 года, долгое время пользовался MacOS Mojave, обновляться до новых выпусков, зная возможные проблемы, желания не было. Немного перебирая варианты дистрибутивов и попробовав различные Live образы, выбор пал на Debian 11 но так как официально он еще не вышел (выход намечен на 14 августа 2021), то взял его второй релиз кандидат Bullseye RC 2.
Проблема 1
Вот тут и появился первый подводный камень: Debian поддерживает не все wifi устройства из коробки. На помощь могут прийти non-free прошивки, которые можно установить после установки системы, добавив репозитории этих несвободных прошивок, в файле sources.list .
Проблема 2
Теперь появляется второй подводный камень: а как мы установим прошивку для wifi устройства если у нас не работает сеть после установки? Тут уже на помощь пришел смартфон с включенным режимом USB Tethering. Подключив с помощью кабеля USB к макбуку, установщик на удивление сразу распознал это как проводное сетевое соединение. Таким образом интернет соединение для установки драйверов на wifi и первоначальных пакетов, мы себе обеспечили.
Действия после установки
Сам процесс инсталляции я описывать не буду так как все индивидуально, и это тема для отдельной статьи.
После установки открываем терминал и утилитой lspci узнаем модель нашего wifi устройства, введя следующую команду:
На выводе получим название модели устройства, в моей случае это:
Network controller [0280]: Broadcom Inc. and subsidiaries BCM4360 802.11ac Wireless Network Adapter [14e4:43a0] (rev 03)
BCM4360 это и есть модель wifi устройства. Свободных прошивок к сожалению на него нет и теперь чтобы wifi заработал, нам придется установить несвободный драйвер broadcom-sta-dkms который предоставляет исходный код для модуля ядра wl Остальной список поддерживаемых моделей можно посмотреть в описании драйвера https://packages.debian.org/buster/broadcom-sta-dkms
Так же перед установкой, поставим пару необходимых пакетов wireless-tools и wpasupplicant
sudo apt install wireless-tools sudo apt install wpasupplicant
Далее открываем из под рута, файл sources.list (я использую nano)
sudo nano /ect/apt/sources.list
И вписываем возле каждого урла репозитория, напротив слова main , теги contrib non-free . Должно получится примерно следующее:
Затем сохраняем файл и обновляем инфу о пакетах командой sudo apt update .
Теперь устанавливаем сам драйвер введя команду:
sudo apt install linux-image-$(uname -r|sed 's,[^-]*-[^-]*-,,') linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms
По ее завершению, убираем модули b44 b43 b43legacy ssb brcmsmac bcma из ядра системы, командой:
sudo modprobe -r b44 b43 b43legacy ssb brcmsmac bcma
После этого в Network manager’е (я использовал его для настройки сети) появится раздел Wi-Fi Networks где мы уже сможем выбрать доступную сеть и ввести пароль для доступа.
Заключение
Данный гайд может быть полезен не только владельцам маков но и других ноутбуков и десктопов. Так же гайд подойдет остальным Debian производным дистрибутивам (хотя могут быть нюансы).
Is it possible to use Linux USB drivers on Mac OS X?
No. The kernel interfaces are completely different. Though MacOSX and Linux are both UNIXes-ish (in fact, Mac OS X is 100% UNIX Certified) they’re vastly different in architecture. Your best bet would be to try VMWare and use a Linux instance under VMWare to try and access it.
EDIT: I just saw your edit, saying you have source and don’t want VMWare. I’d still say no. The underpinnings of Linux and MacOSX are radically different. The source wouldn’t ‘just work’ unless someone made it work specifically for MacOSX. I’d check the source for ‘#ifdef darwin’ or something similar to that, it won’t work. You’d have to have the right version too — Apple changes it’s kernel enough between major releases that a very old port may not work.
Many years ago, there was a project for device drivers to be portable across platforms. It was called Project UDI. The theory was to have a Device Driver Environment in your kernel. The APIs would be consistent across all OSes. Device drivers were source code compatible everywhere, and binary compatible (what you would like) across machines with the same ABI (x86, AMD64, etc). There was a port I remember for Darwin, but I think it was much more theoretical on MacOSX than anything.
The environment worked technically (it actually shipped as the native Device Driver Interface for UnixWare, with the old DDI a compatibility layer on top of UDI) but flopped for human/political reasons. Having SCO/Caldera as the main push for the project didn’t help much. For an OS with good driver support (say, Solaris, Windows) having those drivers is an advantage over kernels that don’t, so the only support would come by definition from OSes that didn’t have drivers, and not a lot of influence. Stallman didn’t like it much either — binary compatibility would make it less likely (he posited) to ship source for drivers.