Skip to content

Instantly share code, notes, and snippets.

@ukn
Forked from Stono/99-install-facetime-camera.sh
Last active March 26, 2024 20:35
Show Gist options
  • Star 22 You must be signed in to star a gist
  • Fork 9 You must be signed in to fork a gist
  • Save ukn/a2f85e3420ae7d0f64db2274a9bc106b to your computer and use it in GitHub Desktop.
Save ukn/a2f85e3420ae7d0f64db2274a9bc106b to your computer and use it in GitHub Desktop.
Install the kernal module required for the facetimehd camera to work on Linux
#!/bin/bash
set -e
export CONFIG_MODULE_SIG=n
export CONFIG_MODULE_SIG_ALL=n
# For current kernel
export KERNELRELEASE=$(cat /proc/version | awk '{print $3}')
temp_dir=$(mktemp -d)
echo "Installing FacetimeHD camera for $KERNELRELEASE"
cd $temp_dir
git clone https://github.com/patjak/facetimehd-firmware.git
git clone https://github.com/patjak/bcwc_pcie.git
cd $temp_dir/facetimehd-firmware
pwd
make
make install
cd $temp_dir/bcwc_pcie
pwd
make
make install
rm -rf $temp_dir
if [ ! -d "/etc/modules-load.d" ]; then
mkdir -p "/etc/modules-load.d"
fi
cat > "/etc/modules-load.d/facetimehd.conf" << EOL
videobuf2-core
videobuf2_v4l2
videobuf2-dma-sg
facetimehd
EOL
# Workaround for depmod being skipped above with error:
# Warning: modules_install: missing 'System.map' file. Skipping depmod
echo "Generate modules.dep and map files"
sudo depmod
echo "Adding kernel modules"
sudo modprobe -r bdc_pci
sudo modprobe facetimehd
echo "Install complete"
@ba2sai
Copy link

ba2sai commented Jul 29, 2020

It worked like a charm on a MacBook Pro 2015 and Ubuntu 20.04.1 LTS. Thank you!

@TheLandzer
Copy link

hi i need help

Installing FacetimeHD camera for 5.7.11-200.fc32.x86_64
Clonando en 'facetimehd-firmware'...
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 886 (delta 0), reused 1 (delta 0), pack-reused 885
Recibiendo objetos: 100% (886/886), 290.76 KiB | 167.00 KiB/s, listo.
Resolviendo deltas: 100% (585/585), listo.
Clonando en 'bcwc_pcie'...
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 1101 (delta 11), reused 10 (delta 4), pack-reused 1083
Recibiendo objetos: 100% (1101/1101), 377.88 KiB | 658.00 KiB/s, listo.
Resolviendo deltas: 100% (738/738), listo.
/tmp/tmp.4btMwpOpIy/facetimehd-firmware

Checking dependencies for driver download...
/usr/bin/curl
/usr/bin/xzcat
/usr/bin/cpio

Downloading the driver, please wait...

Found matching hash from OS X, El Capitan 10.11.5
==> Extracting firmware...
--> Decompressing the firmware using gzip...
--> Deleting temporary files...
--> Extracted firmware version 1.43.0

Copying firmware into '//usr/lib/firmware/facetimehd'
install: no se pueden cambiar los permisos de «//usr/lib/firmware/facetimehd»: No existe el fichero o el directorio
make: *** [Makefile:46: install] Error 1

@ukn
Copy link
Author

ukn commented Aug 7, 2020

hi i need help
...
Copying firmware into '//usr/lib/firmware/facetimehd'
install: no se pueden cambiar los permisos de «//usr/lib/firmware/facetimehd»: No existe el fichero o el directorio
make: *** [Makefile:46: install] Error 1

If I understand correctly /usr/lib/firmware/facetimehd directory doesn't exist.
On my OS (Linux Mint 20) it's copied to /lib/firmware/facetimehd.

What Linux distro and version do you have?
Maybe try creating /usr/lib/firmware/facetimehd manually before running the script?

@jungx148
Copy link

This script works great on a MacBook Air 2013 and Ubuntu 16.04 LTS.
Thank you very much.

@bczy
Copy link

bczy commented Oct 22, 2020

Works like a charm on a MacBook Air "Core i5-5350U CPU @ 1.80GHz × 4 " and Ubuntu 20.04.1 LTS
Thanks a lot!

@danielemoraschi
Copy link

Working fine on a MacBook 13" 2015. Camera stop working after upgrading to Mint 20 (5.4.0-52-generic).

@IAmDarthMole
Copy link

hi i need help

Installing FacetimeHD camera for 5.7.11-200.fc32.x86_64
Clonando en 'facetimehd-firmware'...
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 886 (delta 0), reused 1 (delta 0), pack-reused 885
Recibiendo objetos: 100% (886/886), 290.76 KiB | 167.00 KiB/s, listo.
Resolviendo deltas: 100% (585/585), listo.
Clonando en 'bcwc_pcie'...
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 1101 (delta 11), reused 10 (delta 4), pack-reused 1083
Recibiendo objetos: 100% (1101/1101), 377.88 KiB | 658.00 KiB/s, listo.
Resolviendo deltas: 100% (738/738), listo.
/tmp/tmp.4btMwpOpIy/facetimehd-firmware

Checking dependencies for driver download...
/usr/bin/curl
/usr/bin/xzcat
/usr/bin/cpio

Downloading the driver, please wait...

Found matching hash from OS X, El Capitan 10.11.5
==> Extracting firmware...
--> Decompressing the firmware using gzip...
--> Deleting temporary files...
--> Extracted firmware version 1.43.0

Copying firmware into '//usr/lib/firmware/facetimehd'
install: no se pueden cambiar los permisos de «//usr/lib/firmware/facetimehd»: No existe el fichero o el directorio
make: *** [Makefile:46: install] Error 1

I'm not sure if you are still having the problem but I hit the same error and completed the below steps to make it work.

  1. I created a facetimehd folder in the firmware directory.
  2. I ran sudo chmod +x on the .sh file.
  3. I ran the .sh file via terminal with sudo ./
  4. I restarted my machine.

*There was still an error in the output but at the very end and everything else ran fine. I had to do the restart for the changes to take effect and it works.

Machine: Macbook Pro Retina, Early 2015, MX Linux 19.3

Hope this helps!

@kelvinq
Copy link

kelvinq commented Jan 24, 2022

This works perfectly. Thanks!

If you see a:

modprobe: FATAL: Module bdc_pci not found.

Don't worry. It just means that your system did not have this module to begin with and, as such, there is nothing to unload (ie the failed command tries to unload non-existent bdc_pci)! Continue to load your newly compiled facetimehd module anyway:

sudo modprobe facetimehd

Success! :)

@giggit75
Copy link

Hello, when I try to install it, I got the error message
./99-install-facetime-camera.sh: line 12: git: command not found

Could someone please help.

Thx

@ukn
Copy link
Author

ukn commented Mar 22, 2022

Hello, when I try to install it, I got the error message ./99-install-facetime-camera.sh: line 12: git: command not found

Could someone please help.

Thx

@giggit75 looks like you don't have git installed.
Use your favorite search engine to find how to install it on your OS
If it's Ubuntu/Debian it'll be apt update && apt install git

@giggit75
Copy link

@ukn
Hello,

thank you very much, worked finally. ;-*

@xichen-de
Copy link

hi i need help
Installing FacetimeHD camera for 5.7.11-200.fc32.x86_64
Clonando en 'facetimehd-firmware'...
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 886 (delta 0), reused 1 (delta 0), pack-reused 885
Recibiendo objetos: 100% (886/886), 290.76 KiB | 167.00 KiB/s, listo.
Resolviendo deltas: 100% (585/585), listo.
Clonando en 'bcwc_pcie'...
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 1101 (delta 11), reused 10 (delta 4), pack-reused 1083
Recibiendo objetos: 100% (1101/1101), 377.88 KiB | 658.00 KiB/s, listo.
Resolviendo deltas: 100% (738/738), listo.
/tmp/tmp.4btMwpOpIy/facetimehd-firmware
Checking dependencies for driver download...
/usr/bin/curl
/usr/bin/xzcat
/usr/bin/cpio
Downloading the driver, please wait...
Found matching hash from OS X, El Capitan 10.11.5
==> Extracting firmware...
--> Decompressing the firmware using gzip...
--> Deleting temporary files...
--> Extracted firmware version 1.43.0
Copying firmware into '//usr/lib/firmware/facetimehd'
install: no se pueden cambiar los permisos de «//usr/lib/firmware/facetimehd»: No existe el fichero o el directorio
make: *** [Makefile:46: install] Error 1

I'm not sure if you are still having the problem but I hit the same error and completed the below steps to make it work.

  1. I created a facetimehd folder in the firmware directory.
  2. I ran sudo chmod +x on the .sh file.
  3. I ran the .sh file via terminal with sudo ./
  4. I restarted my machine.

*There was still an error in the output but at the very end and everything else ran fine. I had to do the restart for the changes to take effect and it works.

Machine: Macbook Pro Retina, Early 2015, MX Linux 19.3

Hope this helps!

This has saved my life.

@xyb
Copy link

xyb commented Oct 9, 2022

It works perfectly on my MacBook Pro Retina 13″, Mid 2014, MX Linux 21.2

I updated the script to install kernel modules as root user and also added the color calibration files. You might want to check it out here:

@ghoshpp
Copy link

ghoshpp commented Jan 14, 2023

on entering the bcwc-pcie directory the make command:
make -C /lib/modules/5.10.161-1-MANJARO/build M=/home/partha/Downloads/bcwc_pcie modules
returns the error:
make[1]: *** /lib/modules/5.10.161-1-MANJARO/build: No such file or directory. Stop. make: *** [Makefile:12: all] Error 2

Please help...

@ghoshpp
Copy link

ghoshpp commented Jan 14, 2023

further, when the directory /lib/modules/5.10.161-1-MANJARO/build was created and make run from bcwc_pcie directory there is a further error message:
make -C /lib/modules/5.10.161-1-MANJARO/build M=/home/partha/Downloads/bcwc_pcie modules
make[1]: Entering directory '/usr/lib/modules/5.10.161-1-MANJARO/build'
make[1]: *** No rule to make target 'modules'. Stop.
make[1]: Leaving directory '/usr/lib/modules/5.10.161-1-MANJARO/build'
make: *** [Makefile:12: all] Error 2

So there is some problem here with the files in the directory; please help....

@ukn
Copy link
Author

ukn commented Jan 16, 2023

No rule to make target 'modules'.

I don't use this setup any more but have you tried searching the web for this error?
Check if you have kernel headers installed that match the current kernel version.

@Memnoc
Copy link

Memnoc commented Jan 6, 2024

I have sort of gathered all I could find on this topic and the gist itself into another repo with some more info. I hope this can be useful to someone struggling with this.
I had a particular rough time making this work on Debian 12, and then this script helped.
Hope this helps!

P.S. sometimes Cheese is picky with the drivers - test on google meet to see if the fix the worked, then tackle Cheese separately.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment