Make your Pop!_OS (Ubuntu Linux) shortcut key experience more like Mac OS

Overview

Meta Mac

Enables a Mac OS-like shortcut key experience on Pop!_OS (and most Ubuntu-based Linux distros).

Installation

Download or git clone this repository, then run ./install.sh:

wget https://github.com/canadaduane/meta-mac/archive/refs/heads/main.zip
unzip main.zip
cd meta-mac-main
# edit settings/udevmon.yaml and replace the DEVICE LINK with
# your own keyboard device link, then:
./install.sh

Note that this depends on interception's udevmon systemd service, which is installed automatically.

Which Shortcut Keys?

  • For cut/copy/paste key combos, translate to special clipboard keys:

    • Cut: Command-X -> KEY_CUT
    • Copy: Command-C -> KEY_COPY
    • Paste: Command-V -> KEY_PASTE
  • For window switching, let key combos pass through:

    • Switch: Command-Tab -> Meta-Tab
  • The remaning Command-* key combos are translated to Ctrl-*, e.g.

    • Close Window: Command-W -> Ctrl-W
    • New Tab: Command-T -> Ctrl-T
    • Bold: Command-B -> Ctrl-B
    • Italics: Command-I -> Ctrl-I
    • etc.

See https://gitlab.com/interception/linux/plugins/caps2esc

Why?

If I'm honest, the biggest discomfort I have with Linux shortcut keys is the mismatch between the terminal's idea of copy-paste (Ctrl+Shift+C/Ctrl+Shift+V) and everything else in Linux (Ctrl+C/Ctrl+V). And Linux isn't alone--Windows, too, has a weird relationship with copy/paste when it comes to the command shell. Only on the Mac have I experienced the sensible default that Command-C will copy to the clipboard, and Command-V will paste, regardless of which app is running.

But why stop there? If many of us have experience with Mac OS, and if we have the ability to make customizations in Linux (and boy, do we!) then why not make Pop!_OS as comfortable as possible?

On a personal note, I've lived and worked on a Mac for the past 15 years, and while I still admire Apple's technical and design capability, our values have slowly been drifting apart over the years. Apple is no longer the underdog, and it's clear that it doesn't need to design for developers any more.

I'm very excited to joining the free culture movement once again via my first frame.work laptop and Pop!_OS. I've written META Mac in the hope that it will ease the transition for others along this path as well.

TODO

  • Consider global copy/paste shortcut key combination over single-key:
    • Cut: Shift + Delete
    • Copy: Ctrl + Insert
    • Paste: Shift + Insert
  • Fix that holding meta and hitting a clipboard key followed by a non-clipboard key (e.g. 'z' to undo) requires letting go of meta key first.
  • Is there a way to make Command+Click work?

Thanks

Thanks to Francisco Lopes' interception and deafmute's interception-tools debian package.

Comments
  • swap/2 method is now called swapm/2 in keyd v2.4.2

    swap/2 method is now called swapm/2 in keyd v2.4.2

    This config produces a parse exception upon lauch of keyd v2.4.2 The reason: keyd switched to hungarion notation. Thus swap/2 method needs to be renamed to swapm/2.

    opened by cblock 1
  • Switch functionality of option+key?

    Switch functionality of option+key?

    Not much of an issue rather a request. After unsuccessfully battling with Kinto I found your solution to key remapping and it works like a charm. The only thing I'm missing right now are two things:

    opt+q = @ opt+left/right = next word

    I'd do it myself but I'm quite new to Linux and Keyd so I thought of sharing this with you as it may also improve on your desired end product.

    Thanks so much for meta-mac!

    opened by soype 3
  • meta can now be safely overloaded

    meta can now be safely overloaded

    As of 076a186 in keyd the meta key can now safely be used as both the overlay key and a layer activation key.

    so gsettings set org.gnome.mutter overlay-key '' should no longer necessary.

    opened by rvaiya 2
  • Identify keyboard type before swapping modifier keys

    Identify keyboard type before swapping modifier keys

    The keyboard remapper that I normally use to get macOS keyboard shortcuts in Linux (Kinto.sh by Ben Reaves) has a procedure in the installer that asks for you to press the key 2nd to left of the space bar. This allows the install script to identify whether you are on a PC keyboard (Super/Win key code), an Apple keyboard (Option key code), a Chromebook keyboard, or an IBM keyboard with no with no Super/Win key. The Kinto GUI also lets you change the keyboard type on the fly, for when you need to switch physical keyboards.

    I tried to test Meta Mac on a 2007 white MacBook3,1 which of course has an actual Apple keyboard with the Command key in the "correct" place for Mac keyboard shortcuts. This doesn't work well with Meta Mac because (I assume) it's currently only designed to turn a PC keyboard into behaving like a Mac keyboard, by swapping the Control key with the Alt key.

    For Meta Mac to work for people who run Linux on actual Macs (I've got Ubuntu 21.10 on this MacBook), and for those who use Apple external keyboards connected to PC laptops, or for Chromebook users running Linux and other scenarios, you'll need to provide a way to specify or identify the type of keyboard the user is on, and a way to change the keyboard type if necessary.

    opened by RedBearAK 11
  • Implement uninstall script or uninstall argument

    Implement uninstall script or uninstall argument

    Please implement a proper uninstall procedure either as a separate script or just an argument that can be passed to the install script to initiate a full uninstall/disabling of Meta Mac.

    opened by RedBearAK 1
Releases(v0.2.0)
  • v0.2.0(Nov 20, 2021)

    We've switched the underlying key remapping service from interception to keyd.

    This switch allows us more flexibility and less overhead--rather than customizing C code, we can customize configuration files. It also gives you more power--you can use our config files as-is, or tweak them yourself.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Nov 14, 2021)

Owner
Duane Johnson
Artist, inventor, software engineer, hardware hacker, founder of Make Salt Lake and Relm.US, Inc.
Duane Johnson
A laser cut Dreamcast Pop'n Music controller and integrated memory card using the Raspberry Pi Pico's Programmable IO

Dreamcast Pop'n Music Controller Using Raspbery Pi Pico (RP2040) Intro This is a homebrew controller for playing the Pop'n Music games on the Sega Dre

null 42 Dec 29, 2022
Allows to swap the Fn key and left Control key and other tweaks on Macbook Pro and Apple keyboards in GNU/Linux

A patched hid-apple kernel module UPDATE August 2020: swap_fn_leftctrl is now built-in in Linux 5.8 ?? UPDATE Jun 2020: New feature added (swap_fn_f13

Zakhar Semenov 305 Dec 29, 2022
hotcaKey is the global shortcut (aka hotkey) module for node.js and electron.

?? hotcaKey is the global shortcut (aka hotkey) module for node.js and electron. hotcakey is now actively under deploment, so api may have

daylilyfield 6 Jun 20, 2022
This plugin allows Flutter desktop apps to defines system/inapp wide hotkey (i.e. shortcut).

hotkey_manager This plugin allows Flutter desktop apps to defines system/inapp wide hotkey (i.e. shortcut). hotkey_manager Platform Support Quick Star

LeanFlutter 82 Jan 6, 2023
Make screenshot every few minutes to make your small history!

Screenlapse Fun CPP application (which isn't well-made, can be optimized) that automatically make screenshots of your screen every few minutes and sto

raywave's junk projects 3 Aug 18, 2021
⌨️ Personal key mapping for The Key.

The Key Personal key mapping for The Key. This firmware configures: The first key to be the mute key on single tap, and the pause/play key on double t

Zihua Li 1 Dec 25, 2021
A Mac like Control Center for Windows

A Mac like Control Center for Windows.

LoadingName 1 Mar 8, 2022
PHP Encoder, protect PHP scripts in PHP 8 and PHP 7, High Performance, Compitable with X86_64, MIPS, ARM platform and Ubuntu/Centos/OpenWRT system.

What's FRICC2? FRICC2 is a PHP Script encryption tool. When you are developing a commercial software using PHP, the script can be distributed as encry

Hoowa Sun 43 Dec 12, 2022
Deepin Wine for Ubuntu/Debian

Deepin wine for Ubuntu and Debian 一、项目介绍 Deepin-wine 环境的 Ubuntu/Debian 移植版 使用deepin原版二进制文件,解决依赖问题 仅供个人研究学习使用 刚刚适配debian,可能在安装或运行上还存在问题,欢迎反馈! Gitee用户遇到

星外之神 6k Jan 5, 2023
Yet another matrix client. Click packaging for locally running on Ubuntu Touch

Cinny Click Packaging Cinny is a Matrix client focusing primarily on simple, elegant and secure interface. License Cinny source package licensed under

Nitan Alexandru Marcel 6 Nov 15, 2022
Get CPU & GPU temperatures and fan and battery statistics from your Mac.

macOS Hardware Stats Get CPU & GPU temperatures and fan and battery statistics from your Mac. This simple script will output a JSON array containing h

tigattack 4 May 5, 2022
Serial Data Monitor is a multiplatform (Windows, Linux, Mac, ...) tool to interactively receive/edit/monitor data and send commands to an embedded system via the serial bus

See wiki for full documentation Serial Data Monitor Description Serial Data Monitor is a multiplatform (Windows, Linux, Mac, ...) tool to interactivel

monnoliv 4 Oct 29, 2021
Windscribe 2.0 desktop client for Windows, Mac and Linux

Windscribe 2.0 Desktop Application This repo contains the complete source code for the Windscribe 2.0 app. This includes installer, service/helper, ba

Windscribe 362 Jan 3, 2023
Qt5 "Hello, world!" app for Linux, BSD, Windows, Mac.

hello world in qt5 Contributions in all forms (code, bug reports, community engagement, localization, etc) are warmly welcomed. Development activity I

Jakob Flierl 2 Jan 26, 2022
Drmemory - Memory Debugger for Windows, Linux, Mac, and Android

Dr. Memory: the memory debugger About Dr. Memory Dr. Memory is a memory monitoring tool capable of identifying memory-related programming errors such

DynamoRIO 2.1k Dec 28, 2022
Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on OpenGL 1.x-4.x supporting Windows, Linux and Mac OS X.

Visualization Library 2.2 Gallery About Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on the in

Michele 313 Nov 8, 2022
Oxygine is C++ engine and framework for 2D games on iOS, Android, Windows, Linux and Mac

BUILD AND RUN See oxygine-framework/readme/ folder. It has instructions on how to build and run oxygine on different platforms. Wiki available at http

Oxygine 735 Dec 23, 2022
Free (libre) font editor for Windows, Mac OS X and GNU+Linux

FontForge FontForge is a free (libre) font editor for Windows, Mac OS X and GNU+Linux. Use it to create, edit and convert fonts in OpenType, TrueType,

null 5k Dec 27, 2022
A Riru module tries to make Magisk more hidden.

Riru - MomoHider (aka IsolatedMagiskHider) Background Many applications now detect Magisk for security, Magisk provided "Magisk Hide" to hide the modi

残页 560 Dec 27, 2022