mactel-support team mailing list archive
-
mactel-support team
-
Mailing list archive
-
Message #00966
configure modules automatically
Hi all,
in the forum we often tell the users to add several options to /etc/modprobe.d/*
and modules to /etc/modules. what about doing this setup automatically?
i recently wrote a script to do so. what do you think about installing this script
by a package and calling it in the package's post-install script?
before doing so, please have a look and comment on it. you can call the attached
script with:
sudo mactel-modules-config --test
or:
sudo mactel-modules-config --test MacBookPro4,1
to check its intended configuration.
not using --test causes the script to output to /etc/modprobe.d/mactel-modules-config,
as well as to update /etc/modules.
finally, before i think it is useful, i'd like to ask a few questions:
1. Does the 5th generation models really need the model option for snd_hda_intel?
Is snd_hda_intel loaded on those machines?
2. Is appleir really deprecated? Right now, i'm blacklisting this module.
by the way: since it is quite confusing to install the necessary packages from the
PPA - not all machines need all packages on all releases - what about adding meta-packages,
e.g., mactel-support-macbookpro4 that installs the other packages through its dependency?
ciao,
Mario
--
Wo das Chaos auf die Ordnung trifft, gewinnt meist das Chaos,
weil es besser organisiert ist.
- Friedrich Nietzsche -
--
_____ ________
/ \ / ____/ Mario Schwalbe
/ \ / \ \____ \
/ Y \/ \ eMail: schwalbe@xxxxxxxxxxxxxxxxx,
\____|__ /______ / s4700588@xxxxxxxxxxxxxxxxx
\/ \/
key ID: 7DA9 DAFF
public key: https://www1.inf.tu-dresden.de/~s4700588/key.asc
key fingerprint: 2979 AA20 4A93 B527 90CC 45E5 4B28 511A 7DA9 DAFF
#!/bin/bash
NAME=${0##*/}
MODPROBE_OPTIONS_FILE="/etc/modprobe.d/$NAME"
. /etc/lsb-release
#
# general functions
#
jaunty_or_newer()
{
if [ "$DISTRIB_CODENAME" = "jaunty" ] ; then
return 0
fi
return 1
}
add_to_etc_modules()
{
# never add in test-only mode
if [ -z "$TEST_ONLY" ] ; then
for m in "$@" ; do
# the regex also applies to commented modules, allowing
# to make the script ignore a module
if ! grep -qE "^([[:space:]]|#)*$m" /etc/modules ; then
echo "# added by $NAME" >> /etc/modules
echo "$m" >> /etc/modules
fi
done
fi
}
#
# general options
#
general_options()
{
cat <<EOF >> "$MODPROBE_OPTIONS_FILE"
# enable autosuspend of USB subsystem
options usbcore autosuspend=1
## function keys control hardware functions
#options hid pb_fnmode=2
# obsolete module: use LIRC instead
blacklist appleir
EOF
}
#
# model specific options
#
apple_smc()
{
# no need to check whether then dkms package is installed
# the upstream module should work as well
add_to_etc_modules applesmc
}
broadcom_wlan()
{
cat <<EOF >> "$MODPROBE_OPTIONS_FILE"
# blacklist conflicting modules for wl/ndiswrapper to work
blacklist ssb
blacklist b43
blacklist b43legacy
EOF
}
intel_sound()
{
cat <<EOF >> "$MODPROBE_OPTIONS_FILE"
# fix sound for SantaRosa (Intel chipset) Macs
options snd_hda_intel model=$1
EOF
}
nvidia_graphics()
{
cat <<EOF >> "$MODPROBE_OPTIONS_FILE"
# unnecessary modules: the nvidia driver handles AGP as well
blacklist intel_agp
blacklist agpgart
EOF
}
nvidia_backlight()
{
m="$1"
# check whether nvidia_bl is installed if to be used
# (mbp_nvidia_bl is available upstream)
if [ "$m" = "nvidia_bl" ] && ! dpkg -L nvidia-bl-dkms > /dev/null ; then
m="mbp_nvidia_bl"
fi
# blacklisting is necessary for jaunty because module auto-loading
# finally works as it should have in earlier versions
if [ "$m" = "nvidia_bl" ] ; then
# only intrepid: add the shift option to avoid
# brightness level overflows in g-p-m
if ! jaunty_or_newer ; then
cat <<EOF >> "$MODPROBE_OPTIONS_FILE"
# fix brightness level overflow with nvidia_bl
options nvidia_bl shift=2
EOF
fi
cat <<EOF >> "$MODPROBE_OPTIONS_FILE"
# blacklist mbp_nvidia_bl in order to use nvidia_bl
blacklist mbp_nvidia_bl
EOF
elif [ "$m" = "mbp_nvidia_bl" ] ; then
cat <<EOF >> "$MODPROBE_OPTIONS_FILE"
# blacklist nvidia_bl in order to use mbp_nvidia_bl
blacklist nvidia_bl
EOF
fi
# now add the module to /etc/modules
add_to_etc_modules "$m"
}
#
# get --test option
#
if [ "$1" = "--test" ] || [ "$1" = "--show-only" ] || [ "$1" = "--dry-run" ] ; then
MODPROBE_OPTIONS_FILE="/dev/stdout"
TEST_ONLY=1
shift
fi
#
# get vendor and model string if not provided via command line
#
if [ ! -z "$1" ] ; then
VENDOR="Apple Inc."
MODEL="$1"
else
VENDOR=$(dmidecode --string system-manufacturer)
if [ $? -ne 0 ] ; then
echo "$NAME: Failed to run dmidecode. Are you root?" > /dev/stderr
exit 1
fi
MODEL=$(dmidecode --string system-product-name)
if [ $? -ne 0 ] ; then
echo "$NAME: Failed to run dmidecode. Are you root?" > /dev/stderr
exit 1
fi
fi
#
# check vendor string
#
if [ "$VENDOR" != "Apple Inc." ] ; then
echo "$NAME: No Apple machine detected." > /dev/stderr
exit 1
fi
#
# truncate file & print header
#
cat <<EOF > "$MODPROBE_OPTIONS_FILE"
#
# This file has been automatically created by $NAME. Do not edit.
# Don't forget to run \`update-initramfs -k all -u\` after updating this file.
#
# detected machine:
# vendor: $VENDOR
# model: $MODEL
#
EOF
#
# print general options
#
general_options
#
# print model specific options
#
case "$MODEL" in
MacBookAir1,1|MacBook4,1)
apple_smc
broadcom_wlan
intel_sound mbp3
;;
MacBookPro3,1|MacBookPro3,2|MacBookPro4,1)
apple_smc
broadcom_wlan
intel_sound mbp3
nvidia_graphics
# nvidia_bl works better than mbp_nvidia_bl on those models
nvidia_backlight nvidia_bl
;;
MacBookAir2,1|MacBook5,1)
apple_smc
broadcom_wlan
# is this necessary?
intel_sound mbp3
nvidia_graphics
# nvidia_bl works better than mbp_nvidia_bl on those models
nvidia_backlight nvidia_bl
;;
MacBookPro5,1)
apple_smc
broadcom_wlan
# is this necessary?
intel_sound mbp3
nvidia_graphics
# same as above but nvidia_bl does not work on MacBookPro5
nvidia_backlight mbp_nvidia_bl
;;
#
# still incomplete - help appreciated
#
# iMac4,1|iMac4,2|iMac5,1|iMac6,1|iMac7,1|iMac8,1)
# apple_smc
# intel_sound imac24
# ;;
*)
echo "# Unsupported model. No more options available."
;;
esac
# ***** end of source *****
Attachment:
signature.asc
Description: OpenPGP digital signature
Follow ups