Tutorial para replicar los atajos de teclado de macOS en un escritorio GNOME, usando una combinación de atajos nativos de GNOME y xremap.
Probado en Ubuntu con GNOME Shell, en un Mac mini con un teclado Logitech MX Keys Mini (Bluetooth) y distribución
es+mac. La teclaSuper(⊞ Win / ⌘ Cmd) actúa como la tecla Command de Mac.
No necesitas xremap para esto. GNOME ya trae el comportamiento tipo macOS:
| Atajo | Acción |
|---|---|
Super+Tab |
Cambiar entre aplicaciones (con menú visual al mantener presionado) |
Shift+Super+Tab |
Igual, pero hacia atrás |
Alt+Tab |
Cambiar entre ventanas individuales |
Shift+Alt+Tab |
Igual, pero hacia atrás |
Al mantener presionado Super después de pulsar Tab, el menú de cambio
permanece visible y puedes seguir pulsando Tab para avanzar — exactamente como
⌘+Tab en macOS.
Puedes verificar la configuración actual con:
gsettings get org.gnome.desktop.wm.keybindings switch-applications
# ['<Super>Tab']
gsettings get org.gnome.desktop.wm.keybindings switch-windows
# ['<Alt>Tab']Y modificarla (si hiciera falta) con gsettings set, o desde
Configuración → Teclado → Atajos de teclado → Navegación.
⚠️ Por esto mismo, no remapeesSuper-Taben xremap: interceptarías el atajo antes de que llegue a GNOME y perderías el menú nativo.
También nativo de GNOME: la búsqueda del overview (Actividades) busca
aplicaciones, archivos y más, igual que Spotlight. Solo hay que asignarle
Super+Espacio.
Ojo con el conflicto: por defecto GNOME usa Super+Espacio para cambiar
la distribución del teclado (switch-input-source). Si usas varias
distribuciones, muévelo a otra combinación en vez de borrarlo:
# Mover el cambio de idioma a Super+Alt+Espacio
gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Alt><Super>space', 'XF86Keyboard']"
gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "['<Shift><Alt><Super>space', '<Shift>XF86Keyboard']"
# Super+Espacio abre el overview con búsqueda (escribe y aparecen las apps)
gsettings set org.gnome.shell.keybindings toggle-overview "['<Super>space']"| Atajo | Acción |
|---|---|
Super+Espacio |
Abrir búsqueda (overview) — escribe para buscar apps |
Super+Alt+Espacio |
Cambiar distribución de teclado |
Super+A |
Cuadrícula de aplicaciones (ya venía por defecto) |
Para los atajos de edición y navegación (⌘C, ⌘V, ⌘←, ⌥←, etc.) se usa
xremap, un remapeador de teclas a nivel de evdev que funciona en Wayland y X11.
cargo install xremap --features gnome # para GNOME Wayland
# o descarga el binario desde https://github.com/xremap/xremap/releasesEn GNOME Wayland instala además la extensión xremap GNOME extension para que xremap pueda detectar la aplicación activa (necesario para las reglas por aplicación).
keymap:
# --- Cambio de ventanas/apps ---
# Nada que hacer: Super+Tab ya funciona nativo en GNOME (ver sección 1).
# --- Edición básica (excepto en terminales, donde Ctrl+C = interrumpir) ---
- name: Cmd edicion basica
application:
not:
- gnome-terminal
- gnome-terminal-server
- kitty
- alacritty
remap:
Super-c: C-c # copiar
Super-v: C-v # pegar
Super-x: C-x # cortar
Super-a: C-a # seleccionar todo
Super-z: C-z # deshacer
Super-Shift-z: C-Shift-z # rehacer
Super-f: C-f # buscar
Super-s: C-s # guardar
Super-w: C-w # cerrar pestaña
Super-t: C-t # nueva pestaña
# --- Navegación de línea/documento ---
- name: Cmd navegacion
remap:
Super-Left: Home # inicio de línea
Super-Right: End # fin de línea
Super-Up: C-Home # inicio del documento
Super-Down: C-End # fin del documento
Super-Shift-Left: Shift-Home
Super-Shift-Right: Shift-End
Super-Shift-Up: Shift-C-Home
Super-Shift-Down: Shift-C-End
Super-Backspace: [Shift-Home, Backspace] # borrar hasta inicio de línea
# --- Navegación/selección por palabra (Option = Alt) ---
M-Left: C-Left # palabra anterior
M-Right: C-Right # palabra siguiente
M-Shift-Left: Shift-C-Left
M-Shift-Right: Shift-C-Right
M-Backspace: C-Backspace # borrar palabra anterior- Terminales excluidos de la edición básica: en una terminal
Ctrl+Cinterrumpe el proceso, así que remapearSuper-c → Ctrl-callí sería peligroso. La reglaapplication: not: [...]los excluye. Super-Backspacecomo macro: xremap permite listas de teclas ([Shift-Home, Backspace]) — selecciona hasta el inicio de línea y borra, igual que⌘⌫en Mac.M-es Alt en la sintaxis de xremap (mnemónico de "Meta"), lo que replica la tecla Option (⌥) de Mac para saltar por palabras.
xremap necesita leer /dev/input y escribir en /dev/uinput. Para no
ejecutarlo como root:
# Añadir tu usuario a los grupos input y uinput
sudo usermod -aG input,uinput $USER
# Regla udev para que /dev/uinput sea accesible por el grupo
# /etc/udev/rules.d/99-uinput.rules
echo 'KERNEL=="uinput", GROUP="input", MODE="0660"' | sudo tee /etc/udev/rules.d/99-uinput.rules
sudo udevadm control --reload-rules && sudo udevadm trigger
# Cierra sesión y vuelve a entrar para que los grupos apliquen~/.config/systemd/user/xremap.service:
[Unit]
Description=xremap
After=graphical-session.target
[Service]
ExecStart=%h/.cargo/bin/xremap --watch %h/.config/xremap/config.yml
Restart=always
RestartSec=3
[Install]
WantedBy=default.targetsystemctl --user daemon-reload
systemctl --user enable --now xremap.serviceDetalles importantes:
--watches clave con teclados Bluetooth: el MX Keys Mini se desconecta al quedar inactivo, y sin--watchxremap no lo volvería a capturar al reconectarse. Con el flag, xremap detecta el dispositivo nuevo automáticamente (se ve en los logs:/dev/input/eventXX: MX Keys Mini Keyboard).- No hace falta
--device: xremap detecta los teclados automáticamente. Si tuvieras varios y quisieras remapear solo el Logitech, añadirías--device "MX Keys Mini Keyboard"alExecStart. Restart=always+RestartSec=3reviven el servicio si se cae.- Para revisar estado y logs:
systemctl --user status xremap
journalctl --user -u xremap -f| Comportamiento macOS | Cómo se logra en Linux |
|---|---|
⌘+Tab cambia apps, mantener ⌘ muestra el menú |
Nativo de GNOME (Super+Tab) |
⌘+Espacio busca apps (Spotlight) |
GNOME: toggle-overview en Super+Espacio |
⌘C / ⌘V / ⌘X / ⌘Z / ⌘A / ⌘F / ⌘S / ⌘W / ⌘T |
xremap → equivalentes con Ctrl |
⌘←/→/↑/↓ inicio/fin de línea/documento |
xremap → Home/End/C-Home/C-End |
⌥←/→ saltar por palabra |
xremap → C-Left/C-Right |
⌘⌫ borrar hasta inicio de línea |
xremap → macro [Shift-Home, Backspace] |