macOS-style Super+C / Super+V copy-paste everywhere on Fedora GNOME (incl. Ptyxis terminal)

Published 21 June 2026

date
env
linux Fedora 44, GNOME on Wayland, keyd 2.6.0, Ptyxis terminal macos N/A — habits carried over from macOS (Cmd+C / Cmd+V)

Symptom

Coming from macOS, my fingers expect Cmd+C / Cmd+V (the Cmd key sits where the Super/⊞ key is on a PC keyboard). On Fedora GNOME I instead have to use Ctrl+C / Ctrl+V in GUI apps, and the even more awkward Ctrl+Shift+C / Ctrl+Shift+V inside the terminal. I want Super+C / Super+V / Super+X to copy / paste / cut everywhere — GNOME apps and the Ptyxis terminal.

Two things get in the way out of the box:

  • Super+V (and Super+M) are already bound by GNOME to open the notification list / calendar, so pressing Super+V pops up the calendar.
  • The terminal needs a different copy/paste signal than Ctrl+C, because Ctrl+C must keep meaning SIGINT (interrupt the running program).

Root cause

There is no single “copy” action in Linux to bind a key to; copy/paste is handled independently by each application. Two naive approaches both fail:

  • Binding Super+C to send Ctrl+C breaks the terminal: there Ctrl+C is SIGINT, so you would kill the foreground process instead of copying.
  • A GNOME custom shortcut that “types” Ctrl+C needs a key injector. On GNOME/Wayland wtype does not work (Mutter does not implement the virtual_keyboard protocol), and ydotool is a clunky root daemon with keyboard-layout issues.

The clean, well-known answer is to emit the dedicated XF86Copy / XF86Paste / XF86Cut media keys (the keys a keyboard’s physical copy/paste/cut buttons send). GTK/Qt apps interpret these as copy/paste, and — crucially — VTE-based terminals treat them as copy/paste without disturbing Ctrl+C/SIGINT. This idea is described by Hugo Osvaldo Barrera in Copying with Super+C (see Sources).

To produce those keysyms reliably on Wayland, keyd is the right tool: it remaps at the kernel level (evdev/uinput), below the display server, so a single config works in Wayland, X11, the TTY and every app (confirmed by the keyd project; see Sources).

Two machine-specific gotchas, both confirmed on this machine:

  • In keyd 2.6.0 the inline chord form meta+c = copy is rejected (WARNING: meta is not a valid key). The working form is the [meta] modifier layer.
  • Ptyxis (the default Fedora terminal, VTE/GTK4) does not bind the XF86Copy/XF86Paste media keys by default, so the terminal ignores them until its own shortcuts are pointed at those keysyms.

Diagnosis (optional)

Confirm which terminal is in use (Fedora ships Ptyxis by default):

Terminal window
ps -e -o comm= | grep -iE "ptyxis|kgx|gnome-terminal|kitty|alacritty|foot"

Confirm GNOME owns Super+V / Super+M:

Terminal window
gsettings get org.gnome.shell.keybindings toggle-message-tray

After configuring keyd (below), confirm keyd parsed the config without rejecting any key:

Terminal window
journalctl -u keyd --no-pager -n 20 | grep -i "not a valid key"

No output means the bindings were accepted.


Solution

The approach: keyd turns Super+C/V/X into the XF86Copy/Paste/Cut media keys globally; GNOME apps honour them natively; Ptyxis is told to honour them too.

Prerequisites / warnings

  • keyd runs as a root daemon and grabs keyboard devices system-wide. It is a small, single-purpose, widely used tool, but it does sit in your input path.
  • Pointing Ptyxis at the media keys replaces its Ctrl+Shift+C / Ctrl+Shift+V (these are single-value settings). Ctrl+C as SIGINT is untouched.
  • keyd is not in the Fedora repositories; it is installed from the alternateved/keyd COPR.

Steps

  1. Install keyd and enable its service.

    Terminal window
    sudo dnf copr enable alternateved/keyd
    sudo dnf install keyd
    sudo systemctl enable --now keyd
  2. Write the keyd configuration (the [meta] layer = “while Super is held”).

    Terminal window
    sudo tee /etc/keyd/default.conf > /dev/null <<'EOF'
    [ids]
    *
    [meta]
    c = copy
    v = paste
    x = cut
    EOF
  3. Reload keyd so it picks up the new config.

    Terminal window
    sudo keyd reload
  4. Tell the Ptyxis terminal to honour the media keys.

    Terminal window
    gsettings set org.gnome.Ptyxis.Shortcuts copy-clipboard 'XF86Copy'
    gsettings set org.gnome.Ptyxis.Shortcuts paste-clipboard 'XF86Paste'
  5. (Optional) Free up Super+M, which still opens the calendar. keyd already intercepts Super+V before GNOME sees it, but Super+M is a second binding on the same action.

    Terminal window
    gsettings set org.gnome.shell.keybindings toggle-message-tray "[]"
  6. Fully restart Ptyxis so it reloads its shortcuts (close every window; if a background agent persists, end it).

    Terminal window
    pkill ptyxis-agent

Note on “cut” in the terminal: Ptyxis has no cut action (terminal output is read-only), so Super+X does nothing there by design. It still cuts in GUI text fields.


Verify

keyd accepted every binding (expect no output):

Terminal window
journalctl -u keyd --no-pager -n 20 | grep -i "not a valid key"

The service is active and enabled:

Terminal window
systemctl is-active keyd && systemctl is-enabled keyd

Ptyxis points at the media keys:

Terminal window
gsettings get org.gnome.Ptyxis.Shortcuts copy-clipboard
gsettings get org.gnome.Ptyxis.Shortcuts paste-clipboard

Expected:

'XF86Copy'
'XF86Paste'

Manual checks:

  • In a GNOME app (e.g. a browser text field): select text → Super+C, place cursor → Super+V. Cut with Super+X.
  • In Ptyxis: select output → Super+C, then Super+V to paste. Confirm Ctrl+C still interrupts a running command (e.g. ping).
  • Press Super+V on the desktop: the calendar must not appear.

Rollback

Undo everything, in reverse order. Each block is independent — run only what you need.

Restore the Ptyxis terminal shortcuts (Ctrl+Shift+C/V):

Terminal window
gsettings reset org.gnome.Ptyxis.Shortcuts copy-clipboard
gsettings reset org.gnome.Ptyxis.Shortcuts paste-clipboard
pkill ptyxis-agent

Restore the GNOME calendar shortcut (only if you cleared it in step 5):

Terminal window
gsettings reset org.gnome.shell.keybindings toggle-message-tray

Remove the keyd remapping and the daemon:

Terminal window
sudo systemctl disable --now keyd
sudo rm -f /etc/keyd/default.conf
sudo dnf remove keyd
sudo dnf copr remove alternateved/keyd

To keep keyd but temporarily disable the remapping, instead empty the config and reload:

Terminal window
sudo truncate -s 0 /etc/keyd/default.conf
sudo keyd reload

Alternatives

  • Keep Ctrl+Shift+C/V in the terminal too: not possible alongside this setup, because Ptyxis stores a single accelerator per action. You choose one or the other.
  • Per-keyboard targeting: [ids] * matches all keyboards. To limit keyd to the built-in keyboard, run sudo keyd monitor to read its vendor:product id and put it under [ids] instead of *.
  • Other terminals: VTE terminals such as GNOME Terminal / Console honour XF86Copy/XF86Paste natively. kitty, alacritty, foot and xterm need a per-terminal binding to the same keysyms.
  • GNOME-only, no keyd: technically possible via ydotool, but it needs a root socket, the input group, and misbehaves on non-US layouts — not recommended.

Sources

Sources verified on 2026-06-21. The alternateved/keyd COPR install is confirmed working on this machine but its web page blocks automated fetching, so it is not listed above as a verified URL.