Linux on my Mac

I successfully installed Debian 13 from a USB drive on my 2011 Early 13" MacBook Pro with an i5 processor, 8 GB of RAM, a 256 GByte SSD, and integrated graphics. It runs perfectly, but I still had a few questions and issues that I carefully addressed.

Wi-Fi firmware issue (Broadcom BCM4331)

The system cannot find the firmware-b43-installer package even after running `apt update` because Debian 13 has moved away from the traditional `/etc/apt/sources.list` file and switched to the modern DEB822 format. By default, only the fully open-source (main) and factory-default firmware (non-free-firmware) repositories are active. However, the installer package you’re looking for is located in the contrib category.

To fix this, you’ll need a temporary internet connection on your Mac (for example, via an Ethernet cable or USB tethering from an Android phone).

Steps to fix the issue:

   Open the Terminal on your MacBook and edit the sources.list file to match the new structure:

sudo nano /etc/apt/sources.list.d/debian.sources

   
   Look for the lines starting with “Components:” (there will be several due to different version tracking, e.g., trixie, trixie-updates). By default, they look like this:
   
   Components: main non-free-firmware
   
   Modify these lines by adding the words “contrib” and “non-free” at the end:
   
   Components: main non-free-firmware contrib non-free
   
   Save the file (Ctrl+O, then Enter), and exit (Ctrl+X).

Update the package list and install the firmware installer (this process will automatically download the Broadcom microcode used by Apple over the network):

sudo apt update
sudo apt install firmware-b43-installer

At the end of the installation, restart the Wi-Fi module, or simply restart the computer:

sudo reboot

Since the MacBook’s hardware (particularly its cooling and power management) differs from that of a typical PC, “maximum performance” here does not mean overclocking, but rather preventing thermal throttling and precisely fine-tuning power management.

Temperature Management and Cooling (Mac-Specific)

MacBooks are notorious for aggressively throttling the CPU clock speed under Linux if the system does not handle the sensors properly.

   Thermald: This package is the “thermal control daemon” for Intel processors. Debian handles this automatically, but it’s worth making sure it’s running:

sudo apt install thermald
sudo systemctl enable --now thermald

This prevents the Mac from “overheating” simply because Linux couldn’t control the fans properly.

Power Management (TLP)

TLP is the best tool for keeping your MacBook’s battery and CPU in balance. The goal isn’t just to extend battery life, but also to prevent the CPU from unnecessarily switching to “powersave” mode when you need performance.

   Installation:

sudo apt install tlp tlp-rdw
sudo systemctl enable --now tlp

This allows the machine to manage the USB ports, the Wi-Fi card, and the processor’s P-states more “intelligently.”

System Responsiveness (Swappiness)

Since your system runs on an SSD, it’s a good idea to set the swappiness value to 10 (instead of the default 60). This means that Linux will only use the slower "swap" file when RAM is almost completely full. This will noticeably speed up window switching and program launches.

   Configuration:

# Check the current value:
cat /proc/sys/vm/swappiness
# Set it to 10:
echo "vm.swappiness=10" | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl -p /etc/sysctl.d/99-swappiness.conf

Intel Microcode (Stability)

MacBooks manufactured before late 2020, (pre-M1 MacBooks) almost without exception have Intel processors. Debian often fails to install the latest CPU microcode, which is critical for stability and security.

   Check to see if it’s installed:

   sudo apt install intel-microcode

   
   If the status is “active (waiting),” everything is fine and the system performs the “cleanup” weekly.

zRAM (Optimizing RAM and Preserving the SSD)

The essence of zRAM is that it creates a compressed area within RAM. When the system runs out of physical memory, it does not write to the slow and wear-inducing swap partition on the SSD, but instead compresses the data within RAM.

Installation:

sudo apt update
sudo apt install zram-tools

Verification:
After installation, the zramswap service starts automatically. You can check if it’s active:

zramctl

(If a /dev/zram0 device appears, it’s working properly.)

Why does this help with SSDs?

By using zRAM, the system treats “RAM compression” as a priority, so it will only use swap space on the physical disk if both zRAM (and physical RAM) are completely full. This significantly reduces the number of write cycles on your SSD.

Boot Time Analysis

The `systemd-analyze` commands are the standard methods for "dissecting" the boot time of Debian (and any systemd-based distribution).

Run these commands one after another:

  • Summary (total time):
systemd-analyze

This shows how long it took to load the kernel, the initrd, and userspace.

  • List of “culprits” (what took the longest):
systemd-analyze blame

This provides a list with the slowest services at the top. If you see something here that you don’t use (e.g., bluetooth.service if you don’t have a Bluetooth device, or avahi-daemon), you can disable it.

  • Critical Chain (what’s waiting for what):
systemd-analyze critical-chain

This is the most important command because it shows how processes depend on one another. Processes marked in red are the ones holding up the system’s startup.

Optimizing Boot Time (the “Bottleneck”)

Based on the output of `systemd-analyze blame`, the following services slow down system startup the most:

  •    NetworkManager-wait-online.service (11.084s): This is responsible for the longest delay. This service waits for the machine to establish a full network connection before allowing the boot process to continue. If you do not use network shares (e.g., NFS or SMB) immediately upon login, this causes unnecessary slowdown.

       Solution:

sudo systemctl disable NetworkManager-wait-online.service
  •     exim4.service (280 ms): This is a mail server component. It is not needed on a MacBook for home use.

       Solution:

sudo systemctl disable exim4.service
  •    bluetooth.service (370 ms): If you don't use a Bluetooth mouse or headphones, you can disable this as well.

       Solution:

sudo systemctl disable bluetooth.service

Important: After disabling these, restart your computer and run the systemd-analyze command again. You’ll be surprised at how much faster the graphical interface loads.

On my MacBook, why does the left side sound quieter during the sound test in the Debian 13 GNOME settings? "This is a known MacBook + Linux audio issue. The balance slider is in the middle, but the ALSA levels aren't the same on both channels."

The root of the problem is that the sound cards used by Apple (mostly Cirrus Logic chips on the HDA Intel bus) are not physically simple 2-channel stereo systems, but rather operate with 4 speakers (typically 2 tweeters and 2 woofers).

Debian 13 (Trixie) uses PipeWire as its default audio server. PipeWire (and thus the associated GNOME settings as well) treats the Mac as a simple 2-channel (“Analog Stereo Duplex”) device and sends the signal to the “Front Left” and “Front Right” channels. Since the physical speaker configuration on Macs is asymmetrical (often, one half of the standard stereo signal drives a tweeter, while the other drives a subwoofer), the result is that the left side sounds much quieter or clipped, even though the GNOME balance slider is set precisely in the middle at 54% volume.

Steps to the solution

  • Directly maximizing the physical ALSA hardware levels
    Your own `amixer -c 0 contents` query clearly shows that the Speaker is numid=1 and the Bass Speaker is numid=3. These must be set to the maximum at the hardware level (which, based on your output, is exactly 127). Run these commands:
# Set the volume of the regular speakers to the hardware maximum (127)
amixer -c 0 cset numid=1 127,127
# Set the volume of the subwoofers (Bass Speakers) to the hardware maximum
amixer -c 0 cset numid=3 127,127

This ensures that the physical amplifier does not cut off either channel, and that global (Master) volume control is left entirely to PipeWire.

  • Forcing the PipeWire 4.0-channel profile
    If the left side is still quieter even after maximizing the hardware levels, PipeWire is distributing the stereo signal using the wrong channel map. Instead of the simple "Stereo" profile, you need to force it to use all 4 physical outputs.
    The easiest way to do this is with pavucontrol (Gnome’s own settings are too simplified for this):

   Install it if it’s not already installed:

sudo apt install pavucontrol

   Launch it: pavucontrol

   Switch to the last tab, “Configuration.”

   Find your HDA Intel PCH sound card and set the profile to “Analog Surround 4.0 Output” (or a similar 4-channel setting).

Képernyőkép 2026-06-09 21-21-48.png

And now, let’s take a look, category by category, at the fine-tuning options that can bring the functionality and appearance even closer to those of classic and modern macOS systems:

Visual and Animation Enhancements

  •    Genie Effect (Window Minimization): One of macOS’s most iconic features is the “Genie” animation when a window minimizes to the Dock. Under GNOME, you can perfectly replicate this using the Burn My Windows extension (with its built-in Genie effect) or the Compiz-style magic lamp effect.

       Source: Burn My Windows GitHub

  •    Authentic Fonts: Inter font
    Inter is an open-source, free font (SIL Open Font License) designed by Rasmus Andersson specifically for on-screen use. It can be used legally on Linux, even for commercial purposes. It was designed based on principles very similar to those of the macOS system font (San Francisco), which is why it provides the closest approximation.

      Source: Inter font

  •    Blur my Shell (Blur): Modern macOS (Big Sur and later) is full of “frosted glass” effects. The Blur my Shell GNOME extension brings this to the top bar, menus, and background, adding incredible depth to the interface.

      Source: Blur my Shell

Functionality and System Behavior (The "Mac Feel")

  •    Native Keyboard Shortcuts (Kinto): When using the Magic Keyboard, it’s certainly annoying when copy/paste doesn’t work in the familiar Cmd + C / Cmd + V format. Kinto.sh is a brilliant script that remaps the keyboard at the system level to match macOS logic (swapping out the Super/Ctrl/Alt functions where appropriate), so all Mac shortcuts will feel "right at your fingertips."

       Source: Kinto GitHub

  •    Spotlight Search (Ulauncher): In macOS, Cmd + Space is the all-purpose search tool. On Linux, the best alternative is Ulauncher. When dressed up with a “WhiteSur” or macOS theme, it looks and sounds just like Spotlight, and with extensions, it works just as well as a calculator and a quick file search tool.

       Source: Ulauncher official website

  •    Quick Look: On a Mac, pressing the spacebar immediately brings up a file preview. You can achieve this by installing the GNOME Sushi package (sudo apt install gnome-sushi). If you select a file in the file manager (Nautilus) and press the spacebar, the behavior is identical to that of macOS.

       Source: GNOME Sushi in the Debian repository

Ecosystem and Extras

  •    AirDrop Alternative (LocalSend): LocalSend provides seamless local file sharing with minimal effort and works quickly and seamlessly with Apple devices (iOS/macOS).

       Source: LocalSend official website

  •    Time Machine (Timeshift): Timeshift provides the classic system restore feature, allowing you to create automated snapshots of your system.

       Source: Timeshift GitHub

  •    System Sounds: To complete the illusion, it’s worth finding a macOS system sound package (e.g., the iconic sound of emptying the trash) and using it to overwrite the default GNOME sounds located in the /usr/share/sounds/ folder.

macOS-like look and feel

Themes – WhiteSur (most popular macOS clone theme)

# Dependencies
sudo apt install git gtk2-engines-murrine sassc
# GTK theme
git clone https://github.com/vinceliuice/WhiteSur-gtk-theme.git
cd WhiteSur-gtk-theme
./install.sh -l -c Light   # or Dark
# Icon theme
git clone https://github.com/vinceliuice/WhiteSur-icon-theme.git
cd WhiteSur-icon-theme
./install.sh
# Cursor theme
git clone https://github.com/vinceliuice/WhiteSur-cursors.git
cd WhiteSur-cursors
./install.sh

Enable with GNOME Tweaks:

sudo apt install gnome-tweaks

→ Appearance → GTK Theme: WhiteSur-Light, Icons: WhiteSur, Cursor: WhiteSur-cursors

Dock – macOS-style app bar

# GNOME Shell extension: Dash to Dock
sudo apt install gnome-shell-extension-dash-to-dock

Window buttons on the left, traffic light style – on macOS they’re on the left:

GNOME Tweaks → Window Management → Titlebar Buttons → Layout: Left

Rounded corners – GNOME extension:

→ Rounded Window Corners Reborn
Font – the free font closest to macOS is Inter:

sudo apt install fonts-inter
# GNOME Tweaks → Fonts → Interface: Inter Regular 11

Keyboard Shortcuts – macOS-style
Since Cmd = Ctrl on your system, many of them already work (Cmd+C/V/Z, etc.). Here are some that might still be missing:

# Cmd+Q = Close application
gsettings set org.gnome.desktop.wm.keybindings close "['<Super>q']"
# Cmd+M = minimize window  
gsettings set org.gnome.desktop.wm.keybindings minimize "['<Super>m']"

# Cmd+H = Hide (macOS Hide) – GNOME doesn’t have a native “hide” function; minimizing is the closest equivalent
# Cmd+W = Close tab/window (app-dependent; most GTK apps already handle this with Ctrl+W)

Cmd+Tab – switch between applications (not windows):

gsettings set org.gnome.desktop.wm.keybindings switch-applications "['<Super>Tab']"
gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward "['<Shift><Super>Tab']"

**Cmd+** – Switch between windows within the same app (Cmd+ on macOS):

gsettings set org.gnome.desktop.wm.keybindings switch-group "['<Super>grave']"

Screenshot – macOS-style keyboard shortcuts

# Cmd+Shift+3 = full screen (macOS)
gsettings set org.gnome.settings-daemon.plugins.media-keys screenshot "['<Shift><Super>3']"
# Cmd+Shift+4 = select area
gsettings set org.gnome.settings-daemon.plugins.media-keys screenshot-clip "['<Shift><Super>4']"

Customizing the Top System Bar:

Clock Format – macOS-Style

# macOS-style: "K, May 25, 19:46"
gsettings set org.gnome.desktop.interface clock-show-weekday true
gsettings set org.gnome.desktop.interface clock-show-date true
gsettings set org.gnome.desktop.interface clock-format '24h'

Just Perfection – the most important extension

With this, you can customize almost everything in the top bar:
→ extensions.gnome.org – Just Perfection

Recommended settings:

Hide the Activities button (macOS doesn’t have this)
Show the app menu
Reduce the top bar’s height (it’s thinner on macOS)

Top Bar Organizer – item order
→ extensions.gnome.org – Top Bar Organizer

You can place the app name on the left and system indicators on the right—just like on macOS.

App name in the top bar – macOS menu bar feel
→ extensions.gnome.org – Window Title Is Back
or
→ extensions.gnome.org – Space Bar – displays workspace names on the left, similar to macOS Spaces.
 

Organizing System Icons

If the right side looks cluttered, the Tray Icons: Reloaded extension helps you organize your tray icons.

Logo Menu – this exactly mimics the macOS menu with the Apple logo (featuring the Shut Down, Settings, etc. menus):
→ extensions.gnome.org – Logo Menu

After installation:

A logo button appears in the top-left corner
Clicking it opens a drop-down menu similar to the macOS Apple menu: Software Center, Settings, Restart, Shut Down, etc.
You can replace the logo with a custom image (Apple SVG).

Important: Download it for your own use and do not distribute this modified system publicly.

# Download a simple Apple logo SVG
wget -O ~/apple-logo.svg "https://upload.wikimedia.org/wikipedia/commons/f/fa/Apple_logo_black.svg"

After installation, click the gear icon:

Menu icon → select the Apple logo (or upload your own)
Show Activities → uncheck if not needed
Drag or hide the "Activities" item in the Top Bar Organizer to avoid duplication

To switch to light mode:

gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita'
gsettings set org.gnome.desktop.interface color-scheme 'prefer-light'

If the panel is still dark, you’ll also need to reset the GNOME Shell theme, it’s likely that a dark shell theme is currently set:

# Reset the shell theme to default
gsettings reset org.gnome.shell.extensions.user-theme name 2>/dev/null

Then go to GNOME Tweaks → Appearance → Shell → Default (blank/Adwaita).

Everything may indeed look large on a 1280x800 display. Here’s how to fine-tune it:
Font Size and Scaling

# Text scaling factor (0.9 = everything 10% smaller)
gsettings set org.gnome.desktop.interface text-scaling-factor 0.9
# Reduce UI font size
gsettings set org.gnome.desktop.interface font-name 'Inter 10'
gsettings set org.gnome.desktop.interface document-font-name 'Cantarell 10'
gsettings set org.gnome.desktop.interface monospace-font-name 'Monospace 10'
# Cursor size (default is 24; 20 is more like macOS)
gsettings set org.gnome.desktop.interface cursor-size 20

Font Hinting – macOS-Style
macOS uses minimal hinting, which brings the look closer to that of macOS:
Tweaks → Fonts:

Hinting → Slight
Anti-aliasing → Subpixel (leave as is; good for LCDs)

If everything is still too large – fractional scaling

# Experimental: 0.8x effective display instead of 1.25x
# (GNOME doesn't support 0.x scaling, but the text-scaling-factor can be set to 0.85)
gsettings set org.gnome.desktop.interface text-scaling-factor 0.85

Try 0.9 first, then fine-tune it to your liking.

You can reduce the size of buttons using GTK CSS. Create an override file:

mkdir -p ~/.config/gtk-3.0
nano ~/.config/gtk-3.0/gtk.css

Enter the following:

/* Reduce titlebar button size */
button.titlebutton {
 min-width: 12px;
 min-height: 12px;
 padding: 2px;
}
/* Titlebar height */
.titlebar {
 padding: 4px 6px;
 min-height: 0;
}

And run:

# For GTK4 apps as well
mkdir -p ~/.config/gtk-4.0
cp ~/.config/gtk-3.0/gtk.css ~/.config/gtk-4.0/gtk.css

The change takes effect immediately when a new window is opened, no restart is needed. If it’s too small, you can fine-tune the padding and min-width values. On macOS, the traffic light buttons are about 12px in diameter; the 12px value is close to that.

Synchronization issue between the GTK theme and the window manager, certain applications (mainly older GTK3 or non-native GNOME apps) sometimes reset the window button layout to its default state.

Nautilus is based on GTK4/libadwaita, for this, you’ll need to reinstall the WhiteSur theme with libadwaita support. Let’s check what’s there:

# Is the WhiteSur GTK4 theme present?
ls ~/.local/share/themes/WhiteSur-Light/gtk-4.0/ 2>/dev/null \
 || ls /usr/share/themes/WhiteSur-Light/gtk-4.0/ 2>/dev/null \
 || echo "no GTK4 theme"
# Is the WhiteSur repo present?
ls ~/WhiteSur-gtk-theme/install.sh 2>/dev/null || echo "no repo"

If the repo is present:

cd ~/WhiteSur-gtk-theme
./install.sh -l -c Light

The -l flag installs libadwaita support, which is required by GTK4 apps (Nautilus, GNOME Settings, etc.) for macOS-style buttons.

If the repo is missing:

git clone https://github.com/vinceliuice/WhiteSur-gtk-theme.git ~/WhiteSur-gtk-theme
cd ~/WhiteSur-gtk-theme
./install.sh -l -c Light

If that still doesn’t work, it’s due to a known limitation of GNOME 48 + libadwaita 1.6+, these apps are becoming less and less permissive about allowing their own styles to be overridden. Unfortunately, there is no completely reliable solution for this.

Here's something else you can try:

# Simplify settings.ini—just the decoration layout
cat > ~/.config/gtk-4.0/settings.ini << 'EOF'
[Settings]
gtk-application-prefer-dark-theme=0
EOF
cat > ~/.config/gtk-3.0/settings.ini << 'EOF'  
[Settings]
gtk-application-prefer-dark-theme=0
EOF

Removing `gtk-decoration-layout` from `settings.ini`, it may have conflicted with the WhiteSur CSS. Button layout is handled by gsettings, so it doesn’t need to be in `settings.ini` as well.
Log out and back in, then reopen the apps and see if anything has changed.

Just Perfection → Panel → Panel Size – reduce it to 28, for example (default is 32). This proportionally shrinks all panel elements, including the text.
If you only want to change the font size without altering the panel height, you’ll need a GNOME Shell CSS override:

mkdir -p ~/.config/gnome-shell
cat > ~/.config/gnome-shell/gnome-shell.css << 'EOF'
/* Top panel font size */
#panel {
 font-size: 11px;
}
#panel .panel-button {
 font-size: 11px;
}
EOF

Then, reload GNOME Shell:

# On Wayland, only logging out and logging in work
# Or Alt+F2 → r → Enter (on X11)

Recommended settings:

Panel Size: 28px
Panel Icon Size: 13px
Panel Button Padding: 4px
Panel Indicator Padding: 4px