Skip to content

Instantly share code, notes, and snippets.

@tomasbarrios
Last active July 18, 2026 07:18
Show Gist options
  • Select an option

  • Save tomasbarrios/396c5a727e7e0f1bfa208ac191c557bf to your computer and use it in GitHub Desktop.

Select an option

Save tomasbarrios/396c5a727e7e0f1bfa208ac191c557bf to your computer and use it in GitHub Desktop.
Teclas estilo macOS en Linux (GNOME + xremap)

Teclas estilo macOS en Linux (GNOME + xremap)

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 tecla Super (⊞ Win / ⌘ Cmd) actúa como la tecla Command de Mac.


1. Cmd+Tab para cambiar de aplicación (nativo de GNOME)

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 remapees Super-Tab en xremap: interceptarías el atajo antes de que llegue a GNOME y perderías el menú nativo.


2. Cmd+Espacio para buscar apps (estilo Spotlight)

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)

3. El resto de atajos: xremap

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.

Instalación

cargo install xremap --features gnome   # para GNOME Wayland
# o descarga el binario desde https://github.com/xremap/xremap/releases

En 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).

Configuración: ~/.config/xremap/config.yml

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

Puntos clave del diseño

  • Terminales excluidos de la edición básica: en una terminal Ctrl+C interrumpe el proceso, así que remapear Super-c → Ctrl-c allí sería peligroso. La regla application: not: [...] los excluye.
  • Super-Backspace como 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.

Permisos (sin sudo)

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

Ejecutar xremap al iniciar sesión (servicio systemd de usuario)

~/.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.target
systemctl --user daemon-reload
systemctl --user enable --now xremap.service

Detalles importantes:

  • --watch es clave con teclados Bluetooth: el MX Keys Mini se desconecta al quedar inactivo, y sin --watch xremap 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" al ExecStart.
  • Restart=always + RestartSec=3 reviven el servicio si se cae.
  • Para revisar estado y logs:
systemctl --user status xremap
journalctl --user -u xremap -f

Resumen

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]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment