Mac OS
- Power management
- Remap keys
- Using US/ANSI layout on built-in ISO keyboards with US/ANSI layout
- Show path in Finder
- Notes
- Commands
- References
Power management
Most power settings seem to have vanished from system settings, but can
be controlled1 with pmset
2 and caffeinate
.
Power management settings using pmset
man pmset
man pmset
See man pmset
for man
pages from MacOS Big Sur and
Sonoma.
PMSET(1) General Commands Manual PMSET(1)
NAME
pmset – manipulate power management settings
SYNOPSIS
pmset [-a | -b | -c | -u] [setting value] [...]
pmset -u [haltlevel percent] [haltafter minutes] [haltremain minutes]
pmset -g [option]
pmset schedule [cancel | cancelall] type date+time [owner]
pmset repeat cancel
pmset repeat type weekdays time
pmset relative [wake | poweron] seconds
pmset [touch | sleepnow | displaysleepnow | boot]
DESCRIPTION
pmset manages power management settings such as idle sleep timing, wake
on administrative access, automatic restart on power loss, etc.
Note that processes may dynamically override these power management
settings by using I/O Kit power assertions. Whenever processes override
any system power settings, pmset will list those processes and their
power assertions in -g and -g assertions. See caffeinate(8).
SETTING
pmset can modify the values of any of the power management settings
defined below. You may specify one or more setting & value pairs on the
command-line invocation of pmset. The -a, -b, -c, -u flags determine
whether the settings apply to battery ( -b ), charger (wall power) ( -c
), UPS ( -u ) or all ( -a ).
Use a minutes argument of 0 to set the idle time to never for sleep
disksleep and displaysleep
pmset must be run as root in order to modify any settings.
SETTINGS
displaysleep - display sleep timer; replaces 'dim' argument in 10.4
(value in minutes, or 0 to disable)
disksleep - disk spindown timer; replaces 'spindown' argument in 10.4
(value in minutes, or 0 to disable)
sleep - system sleep timer (value in minutes, or 0 to disable)
womp - wake on ethernet magic packet (value = 0/1). Same as "Wake for
network access" in System Settings.
ring - wake on modem ring (value = 0/1)
powernap - enable/disable Power Nap on supported machines (value = 0/1)
proximitywake - On supported systems, this option controls system wake
from sleep based on proximity of devices using same iCloud id. (value =
0/1)
autorestart - automatic restart on power loss (value = 0/1)
lidwake - wake the machine when the laptop lid (or clamshell) is opened
(value = 0/1)
acwake - wake the machine when power source (AC/battery) is changed
(value = 0/1)
lessbright - slightly turn down display brightness when switching to this
power source (value = 0/1)
halfdim - display sleep will use an intermediate half-brightness state
between full brightness and fully off (value = 0/1)
sms - use Sudden Motion Sensor to park disk heads on sudden changes in G
force (value = 0/1)
hibernatemode - change hibernation mode. Please use caution. (value =
integer)
hibernatefile - change hibernation image file location. Image may only be
located on the root volume. Please use caution. (value = path)
ttyskeepawake - prevent idle system sleep when any tty (e.g. remote login
session) is 'active'. A tty is 'inactive' only when its idle time exceeds
the system sleep timer. (value = 0/1)
networkoversleep - this setting affects how OS X networking presents
shared network services during system sleep. This setting is not used by
all platforms; changing its value is unsupported.
destroyfvkeyonstandby - Destroy File Vault Key when going to standby
mode. By default File vault keys are retained even when system goes to
standby. If the keys are destroyed, user will be prompted to enter the
password while coming out of standby mode.(value: 1 - Destroy, 0 -
Retain)
GETTING
-g (with no argument) will display the settings currently in use.
-g live displays the settings currently in use.
-g custom displays custom settings for all power sources.
-g cap displays which power management features the machine supports.
-g sched displays scheduled startup/wake and shutdown/sleep events.
-g ups displays UPS emergency thresholds.
-g ps / batt displays status of batteries and UPSs.
-g pslog displays an ongoing log of power source (battery and UPS) state.
-g rawlog displays an ongoing log of battery state as read directly from
battery.
-g therm shows thermal conditions that affect CPU speed. Not available on
all platforms.
-g thermlog shows a log of thermal notifications that affect CPU speed.
Not available on all platforms.
-g assertions displays a summary of power assertions. Assertions may
prevent system sleep or display sleep. Available 10.6 and later.
-g assertionslog shows a log of assertion creations and releases.
Available 10.6 and later.
-g sysload displays the "system load advisory" - a summary of system
activity available from the IOGetSystemLoadAdvisory API. Available 10.6
and later.
-g sysloadlog displays an ongoing log of lives changes to the system load
advisory. Available 10.6 and later.
-g ac / adapter will display details about an attached AC power adapter.
Only supported for MacBook and MacBook Pro.
-g log displays a history of sleeps, wakes, and other power management
events. This log is for admin & debugging purposes.
-g uuid displays the currently active sleep/wake UUID; used within OS X
to correlate sleep/wake activity within one sleep cycle. history
-g uuidlog displays the currently active sleep/wake UUID, and prints a
new UUID as they're set by the system.
-g history is a debugging tool. Prints a timeline of system sleeplwake
UUIDs, when enabled with boot-arg io=0x3000000.
-g historydetailed Prints driver-level timings for a sleep/wake. Pass a
UUID as an argument.
-g powerstate [class names] Prints the current power states for I/O Kit
drivers. Caller may provide one or more I/O Kit class names (separated by
spaces) as an argument. If no classes are provided, it will print all
drivers' power states.
-g powerstatelog [-i interval] [class names] Periodically prints the
power state residency times for some drivers. Caller may provide one or
more I/O Kit class names (separated by spaces). If no classes are
provided, it will log the IOPower plane's root registry entry. Caller may
specify a polling interval, in seconds with -i <polling interval>;
otherwise it defaults to 5 seconds.
-g stats Prints the counts for number sleeps and wakes system has gone
thru since boot.
-g systemstate Prints the current power state of the system and available
capabilites.
-g everything Prints output from every argument under the GETTING header.
This is useful for quickly collecting all the output that pmset provides.
Available in 10.8.
SAFE SLEEP ARGUMENTS
hibernatemode supports values of 0, 3, or 25. Whether or not a
hibernation image gets written is also dependent on the values of standby
and autopoweroff
For example, on desktops that support standby a hibernation image will be
written after the specified standbydelay time. To disable hibernation
images completely, ensure hibernatemode standby and autopoweroff are all
set to 0.
hibernatemode = 0 by default on desktops. The system will not back memory
up to persistent storage. The system must wake from the contents of
memory; the system will lose context on power loss. This is,
historically, plain old sleep.
hibernatemode = 3 by default on portables. The system will store a copy
of memory to persistent storage (the disk), and will power memory during
sleep. The system will wake from memory, unless a power loss forces it to
restore from hibernate image.
hibernatemode = 25 is only settable via pmset. The system will store a
copy of memory to persistent storage (the disk), and will remove power to
memory. The system will restore from disk image. If you want
"hibernation" - slower sleeps, slower wakes, and better battery life, you
should use this setting.
Please note that hibernatefile may only point to a file located on the
root volume.
STANDBY ARGUMENTS
standby causes kernel power management to automatically hibernate a
machine after it has slept for a specified time period. This saves power
while asleep. This setting defaults to ON for supported hardware. The
setting standby will be visible in pmset -g if the feature is supported
on this machine.
standbydelayhigh and standbydelaylow specify the delay, in seconds,
before writing the hibernation image to disk and powering off memory for
Standby. standbydelayhigh is used when the remaining battery capacity is
above highstandbythreshold , and standbydelaylow is used when the
remaining battery capacity is below highstandbythreshold.
highstandbythreshold has a default value of 50 percent.
autopoweroff is enabled by default on supported platforms as an
implementation of Lot 6 to the European Energy-related Products
Directive. After sleeping for <autopoweroffdelay> seconds, the system
will write a hibernation image and go into a lower power chipset sleep.
Wakeups from this state will take longer than wakeups from regular sleep.
autopoweroffdelay specifies the delay, in seconds, before entering
autopoweroff mode.
UPS SPECIFIC ARGUMENTS
UPS-specific arguments are only valid following the -u option. UPS
settings also have an on/off value. Use a -1 argument instead of percent
or minutes to turn any of these settings off. If multiple halt conditions
are specified, the system will halt on the first condition that occurs in
a low power situation.
haltlevel - when draining UPS battery, battery level at which to trigger
an emergency shutdown (value in %)
haltafter - when draining UPS battery, trigger emergency shutdown after
this long running on UPS power (value in minutes, or 0 to disable)
haltremain - when draining UPS battery, trigger emergency shutdown when
this much time remaining on UPS power is estimated (value in minutes, or
0 to disable)
Note: None of these settings are observed on a system with support for an
internal battery, such as a laptop. UPS emergency shutdown settings are
for desktop and server only.
SCHEDULED EVENT ARGUMENTS
pmset allows you to schedule system sleep, shutdown, wakeup and/or power
on. "schedule" is for setting up one-time power events, and "repeat" is
for setting up daily/weekly power on and power off events. Note that you
may only have one pair of repeating events scheduled - a "power on" event
and a "power off" event. For sleep cycling applications, pmset can
schedule a "relative" wakeup or poweron to occur in seconds from the end
of system sleep/shutdown, but this event cannot be cancelled and is
inherently imprecise.
type - one of sleep, wake, poweron, shutdown, wakeorpoweron
date/time - "MM/dd/yy HH:mm:ss" (in 24 hour format; must be in quotes)
time - HH:mm:ss
weekdays - a subset of MTWRFSU ("M" and "MTWRF" are valid strings)
owner - a string describing the person or program who is scheduling this
one-time power event (optional)
POWER SOURCE ARGUMENTS
-g with a 'batt' or 'ps' argument will show the state of all attached
power sources.
-g with a 'pslog' or 'rawlog' argument is normally used for debugging,
such as isolating a problem with an aging battery.
OTHER ARGUMENTS
boot - tell the kernel that system boot is complete (normally LoginWindow
does this). May be useful to Darwin users.
touch - PM re-reads existing settings from disk.
noidle - pmset prevents idle sleep by creating a PM assertion to prevent
idle sleep(while running; hit ctrl-c to cancel). This argument is
deprecated in favor of caffeinate(8). Please use caffeinate(8) instead.
sleepnow - causes an immediate system sleep.
restoredefaults - Restores power management settings to their default
values.
displaysleepnow - causes display to go to sleep immediately.
resetdisplayambientparams - resets the ambient light parameters for
certain Apple displays.
dim - deprecated in 10.4 in favor of 'displaysleep'. 'dim' will continue
to work.
spindown - deprecated in 10.4 in favor of 'disksleep'. 'spindown' will
continue to work.
EXAMPLES
This command sets displaysleep to a 5 minute timer on battery power,
leaving other settings on battery power and other power sources
unperturbed.
pmset -b displaysleep 5
Sets displaysleep to 10, disksleep to 10, system sleep to 30, and turns
on WakeOnMagicPacket for ALL power sources (AC, Battery, and UPS) as
appropriate
pmset -a displaysleep 10 disksleep 10 sleep 30 womp 1
For a system with an attached and supported UPS, this instructs the
system to perform an emergency shutdown when UPS battery drains to below
40%.
pmset -u haltlevel 40
For a system with an attached and supported UPS, this instructs the
system to perform an emergency shutdown when UPS battery drains to below
25%, or when the UPS estimates it has less than 30 minutes remaining
runtime. The system shuts down as soon as either of these conditions is
met.
pmset -u haltlevel 25 haltremain 30
For a system with an attached and supported UPS, this instructs the
system to perform an emergency shutdown after 2 minutes of running on UPS
battery power.
pmset -u haltafter 2
Schedules the system to automatically wake from sleep on July 4, 2016, at
8PM.
pmset schedule wake "07/04/16 20:00:00"
Schedules a repeating shutdown to occur each day, Tuesday through
Saturday, at 11AM.
pmset repeat shutdown TWRFS 11:00:00
Schedules a repeating wake or power on event every tuesday at 12:00 noon,
and a repeating sleep event every night at 8:00 PM.
pmset repeat wakeorpoweron T 12:00:00 sleep MTWRFSU 20:00:00
Cancels all scheduled system sleep, shutdown, wake, and power on events.
pmset repeat cancel
Prints the power management settings in use by the system.
pmset -g
Prints a snapshot of battery/power source state at the moment.
pmset -g batt
If your system suddenly sleeps on battery power with 20-50% of capacity
remaining, leave this command running in a Terminal window. When you see
the problem and later power and wake the computer, you'll be able to
detect sudden discontinuities (like a jump from 30% to 0%) indicative of
an aging battery.
pmset -g pslog
SEE ALSO
caffeinate(8)
FILES
All changes made through pmset are saved in a persistent preferences file
(per-system, not per-user) at
/Library/Preferences/SystemConfiguration/com.apple.PowerManagement.plist
Scheduled power on/off events are stored separately in
/Library/Preferences/SystemConfiguration/com.apple.AutoWake.plist
pmset modifies the same file that System Settings modifies.
Darwin November 9, 2012 Darwin
Print settings for both AC and battery power:
$ sudo pmset -g custom
Print settings used for current power source:
$ sudo pmset -g
Change a setting:
$ sudo pmset $power_source $setting $value
Arguments for power sources:
-b
: battery-c
: AC (charger/wall power)-a
: all
$ sudo pmset -b disablesleep 1
Will set disablesleep
to 1
on battery.
Slowing down battery drain (used on M1)
Apple seem to have been removing some of the power settings from the Settings
panel, but there are some quite useful settings in pmset
that I use.
Current settings for my M1 on battery power:
$ sudo pmset -g
System-wide power settings:
SleepDisabled 0
# Battery power
Currently in use:
standby 1
Sleep On Power Button 1
SleepServices 0 # This doesn't look correct (?)
hibernatefile /var/vm/sleepimage
powernap 0
networkoversleep 0
disksleep 10
sleep 10
hibernatemode 3
ttyskeepawake 0
displaysleep 10
tcpkeepalive 0
lowpowermode 1
womp 0
Current settings, full output
Current settings, full output
The full list of settings I am currently using.
$ sudo pmset -g custom
Battery Power:
Sleep On Power Button 1
lowpowermode 1
standby 1
ttyskeepawake 0
hibernatemode 3
powernap 0
hibernatefile /var/vm/sleepimage
displaysleep 10
womp 0
networkoversleep 0
sleep 10
lessbright 1
tcpkeepalive 0
disksleep 10
SleepServices 0
AC Power:
Sleep On Power Button 1
lowpowermode 1
standby 1
ttyskeepawake 1
hibernatemode 3
powernap 1
hibernatefile /var/vm/sleepimage
displaysleep 30
womp 1
networkoversleep 0
sleep 120
tcpkeepalive 1
disksleep 10
Disable powernap, prevent remote networking sessions from keeping the laptop awake on battery, and prevent it from sending and reading mDNS while sleeping.
$ sudo pmset -b powernap 0
$ sudo pmset -b ttyskeepawake 0
$ sudo pmset -b networkoversleep 0
These settings slow down battery drain on my M1 while it's sleeping on battery (on MacOS).
To slow it down even further, you can disable tcpkeepalive
, but this will
impact services like 'Find my mac' (that has a good reason to run while
sleeping), and pmset
will warn you about that.
$ sudo pmset -b tcpkeepalive 0
Warning: This option disables TCP Keep Alive mechanism when sytem is sleeping.
This will result in some critical features like 'Find My Mac' not to function
properly.
The man
page doesn't mention this option, but presumably it disbales TCP
keep-alive while sleeping.
Sleep after 120 min when on AC power (-c
):
$ sudo pmset -c sleep 120
$ sudo pmset -c disablesleep 0
When on battery power (-b
), sleep after 10 minutes and ensure that sleep
is not disabled:
$ sudo pmset -a disablesleep 0
$ sudo pmset -b disablesleep 0
$ sudo pmset -b sleep 10
$ sudo pmset -b acwake 1
The M1 chip uses very little power to begin with, and I prefer my laptop not sleep on AC power.
System hardware info from system_profiler
man system_profiler
man system_profiler
Man page: man system_profiler
SYSTEM_PROFILER(8) System Manager's Manual SYSTEM_PROFILER(8)
NAME
system_profiler – reports system hardware and software configuration.
SYNOPSIS
system_profiler [-usage]
system_profiler [-listDataTypes]
system_profiler [-xml] dataType1 ... dataTypeN
system_profiler [-xml] [-detailLevel level]
system_profiler [-json] dataType1 ... dataTypeN
system_profiler [-json] [-detailLevel level]
DESCRIPTION
system_profiler reports on the hardware and software configuration of the
system. It can generate plain text reports or XML reports which can be
opened with System Information.app, or JSON reports
Progress and error messages are printed to stderr while actual report
data is printed to stdout. Redirect stderr to /dev/null to suppress
progress and error messages.
The following options are available:
-xml Generates a report in XML format. If the XML report
is redirected to a file with a ".spx" suffix that
file can be opened with System Information.app.
-json Generates a report in JSON format.
-listDataTypes Lists the available datatypes.
-detailLevel level Specifies the level of detail for the report:
mini report with no personal information
basic basic hardware and network information
full all available information
-timeout Specifies the maximum time to wait in seconds for
results. If some information is not available within
the specified time limit then an incomplete or
partial report will be generated. The default
timeout is 180 seconds. Specifying a timeout of 0
means no timeout.
-usage Prints usage info and examples.
EXAMPLES
system_profiler
Generates a text report with the standard detail level.
system_profiler -detailLevel mini
Generates a short report containing no personal information.
system_profiler -listDataTypes
Shows a list of the available data types.
system_profiler SPSoftwareDataType SPNetworkDataType
Generates a text report containing only software and network data.
system_profiler -xml > MyReport.spx
Creates a XML file which can be opened by System Profiler.app
AUTHORS
Apple Inc.
Darwin June 30, 2003 Darwin
MacOS provides system_profiler
, which reports system hardware configurations,
including power settings and current power state.
system_profiler -listDataTypes
system_profiler -listDataTypes
The available datatypes:
$ system_profiler -listDataTypes
Available Datatypes:
SPParallelATADataType
SPUniversalAccessDataType
SPSecureElementDataType
SPApplicationsDataType
SPAudioDataType
SPBluetoothDataType
SPCameraDataType
SPCardReaderDataType
SPiBridgeDataType
SPDeveloperToolsDataType
SPDiagnosticsDataType
SPDisabledSoftwareDataType
SPDiscBurningDataType
SPEthernetDataType
SPExtensionsDataType
SPFibreChannelDataType
SPFireWireDataType
SPFirewallDataType
SPFontsDataType
SPFrameworksDataType
SPDisplaysDataType
SPHardwareDataType
SPInstallHistoryDataType
SPInternationalDataType
SPLegacySoftwareDataType
SPNetworkLocationDataType
SPLogsDataType
SPManagedClientDataType
SPMemoryDataType
SPNVMeDataType
SPNetworkDataType
SPPCIDataType
SPParallelSCSIDataType
SPPowerDataType
SPPrefPaneDataType
SPPrintersSoftwareDataType
SPPrintersDataType
SPConfigurationProfileDataType
SPRawCameraDataType
SPSASDataType
SPSerialATADataType
SPSPIDataType
SPSmartCardsDataType
SPSoftwareDataType
SPStartupItemDataType
Get current cycle count
One of the things that system_profiler
reports is the current number of
power cycles on the battery, found in SPPowerDataType
.
$ system_profiler SPPowerDataType | grep -i 'Cycle Count' | awk '{print $3 }'
209
By passing the -json
argument to system_profiler
, we can get JSON formatted
output, which we can parse
with jq
to get to the cycle count:
$ system_profiler SPPowerDataType -json |
jq '.SPPowerDataType[]
| select(._name == "spbattery_information")
| .sppower_battery_health_info.sppower_battery_cycle_count '
209
This is useful for e.g. writing a script to monitor and track your cycle counts.
You can also download coconutBattery
which is a tool running in the system tray showing you various information
about your battery state. Unfortunately this is a closed source tool. It is
probably just reading the system_profiler
output though.
OS X Daily: How to Find Comprehensive Mac System Info via Terminal (lots of system_profiler
examples)
Prevent sleep with caffeinate
man caffeinate
man caffeinate
Man page: man caffeinate
CAFFEINATE(8) System Manager's Manual CAFFEINATE(8)
NAME
caffeinate – prevent the system from sleeping on behalf of a utility
SYNOPSIS
caffeinate [-disu] [-t timeout] [-w pid] [utility arguments...]
DESCRIPTION
caffeinate creates assertions to alter system sleep behavior. If no
assertion flags are specified, caffeinate creates an assertion to prevent
idle sleep. If a utility is specified, caffeinate creates the assertions
on the utility's behalf, and those assertions will persist for the
duration of the utility's execution. Otherwise, caffeinate creates the
assertions directly, and those assertions will persist until caffeinate
exits.
Available options:
-d Create an assertion to prevent the display from sleeping.
-i Create an assertion to prevent the system from idle sleeping.
-m Create an assertion to prevent the disk from idle sleeping.
-s Create an assertion to prevent the system from sleeping. This
assertion is valid only when system is running on AC power.
-u Create an assertion to declare that user is active. If the
display is off, this option turns the display on and prevents the
display from going into idle sleep. If a timeout is not specified
with '-t' option, then this assertion is taken with a default of
5 second timeout.
-t Specifies the timeout value in seconds for which this assertion
has to be valid. The assertion is dropped after the specified
timeout. Timeout value is not used when an utility is invoked
with this command.
-w Waits for the process with the specified pid to exit. Once the
the process exits, the assertion is also released. This option
is ignored when used with utility option.
EXAMPLE
caffeinate -i make
caffeinate forks a process, execs "make" in it, and holds an assertion
that prevents idle sleep as long as that process is running.
SEE ALSO
pmset(1)
LOCATION
/usr/bin/caffeinate
Darwin November 9, 2012 Darwin
Battery charge limit
Preventing frequent charging to 100% is very important for battery health as it limits the number of full cycles on the battery (avoiding running the battery empty is also important).
I am not aware of any tool provided by Mac OS to limit the battery charge, and the "optmized charging" in the battery settings is limited and unreliable.
There is an excellent tool battery
available from the GitHub repo actuallymentor/battery
.
battery --help
battery --help
Battery CLI utility v1.1.6
Usage:
battery status
output battery SMC status, % and time remaining
battery logs LINES[integer, optional]
output logs of the battery CLI and GUI
eg: battery logs 100
battery maintain LEVEL[1-100,stop]
reboot-persistent battery level maintenance: turn off charging above, and on below a certain value
it has the option of a --force-discharge flag that discharges even when plugged in (this does NOT work well with clamshell mode)
eg: battery maintain 80
eg: battery maintain stop
battery charging SETTING[on/off]
manually set the battery to (not) charge
eg: battery charging on
battery adapter SETTING[on/off]
manually set the adapter to (not) charge even when plugged in
eg: battery adapter off
battery charge LEVEL[1-100]
charge the battery to a certain percentage, and disable charging when that percentage is reached
eg: battery charge 90
battery discharge LEVEL[1-100]
block power input from the adapter until battery falls to this level
eg: battery discharge 90
battery visudo
ensure you don't need to call battery with sudo
This is already used in the setup script, so you should't need it.
battery update
update the battery utility to the latest version
battery reinstall
reinstall the battery utility to the latest version (reruns the installation script)
battery uninstall
enable charging, remove the smc tool, and the battery script
Set a charge limit of 75%:
$ battery maintain 75
Maintaining battery at 75%
Discharge battery to 75%, then start charging:
$ battery discharge 75
See the battery --help
output or the README.md
file
for more info.
Remap keys
Remap modifier keys
The escape key can easily be moved to caps lock in settings.
Using US/ANSI layout on built-in ISO keyboards with US/ANSI layout
On MacBook's with an ISO keyboard (105 keys), the grave key is incorrectly
mapped to §±
(sometimes called Sector sign) which is rather annoying.
According to a Technical Note in the Apple documentation archive, they key codes are:
0x35
: Grave key0x64
: "Keyboard Non-US\
and|
"6
The Apple documentation lists one more "non-US" key:
0x32
: "Keyboard Non-US#
and~
"
While I've never needed to remap this key personally, others might find it useful.
Using hidutil
Broken in MacOS 14.2, fixed in 14.3
Broken in MacOS 14.2, fixed in 14.3
This broke in MacOS 14.2 (as noticed by other folks as well). The issue was raised on Apple Community and Stack Exchange by Yarsolav L.
The bug was also tracked on Open Radar7 as rdar://FB13465290
,
where the fix in MacOS 14.3 was confirmed.
I can also confirm that hidutil
started working as before after upgrading to
MacOS 14.3.
It is possible to remap any key using the built-in hidutil
. All keys have
a hexadecimal code8 which is passed to hidutil
. Apple have
published a technical note
with a table of the codes.
Get the current key remapping state:
$ hidutil property --get UserKeyMapping
(
)
Remove any changes:
$ hidutil property --set '{"UserKeyMapping":[]}'
UserKeyMapping:(
)
The changes are not permanent and changes get reset to the default state
on reboot. But we can use hidutil
to remap keys instead of using a tool
like Karabiner.
To use use keycodes from the Apple documentation8 with hidutil
,
first OR
the keycode with 0x700000000
. The keycodes needed to remap
the grave key are then:
- Grave key:
0x700000035
- "Non US
\
and|
":0x700000064
Pass the keycodes to hidutil
in the format it expects:
$ hidutil property --set '{
"UserKeyMapping":[{
"HIDKeyboardModifierMappingSrc":0x700000035,
"HIDKeyboardModifierMappingDst":0x700000064
}]
}'
And to swap two keys with each other, map them both ways:
$ hidutil property --set '{
"UserKeyMapping":[{
"HIDKeyboardModifierMappingSrc":0x700000035,
"HIDKeyboardModifierMappingDst":0x700000064
},
{
"HIDKeyboardModifierMappingSrc":0x700000064,
"HIDKeyboardModifierMappingDst":0x700000035
}]}'
The setting only lives for the login session, but you can save it as
a shell script (for example in ~/.local/bin/mac-tilde.sh
and run it on login (either with "Login items" in system settings or creating
a .plist
file in /Libary/LaunchDaemon
6 )
Using Karabiner
First Karabiner Elements needs to be downloaded, installed and given the permissions it needs (launches wizard dialogs). Karabiner works by monitoring your keystrokes.
Present a virtual ANSI keyboard to MacOS
Activating a "virtual keyboard" with Karabiner (as an ANSI keyboard), activates the "Change keyboard type" feature in the keyboard settings.
This opens the wizard dialog that asks you to press some keys on your keyboard, and pressing the keys that would be there on an ANSI layout makes MacOS identity the (virtual) keyboard as ANSI.
Press the Z
(or the key labelled as Y
if you have a German keyboard) key
when asked for the key next to left shift, the key in that position on an ANSI
layout. MacOS now takes your word for it and sets the virtual keyboard from
Karabiner as an ANSI layout.
After this, remapping with hidutil
works again. Sometimes the grave key will
simply be in the right position.
Simple modification
Single keys are remapped with a "simple modifiction" in Karabiner
Remap "non_us_backslash" to "grave_accent"and_tilde (`)". You can also map them the
other way, so that you get §±
next to Z
if you want.
Show path in Finder
By default Finder does not show the path to the directory you are in (and doesn't show a button to go to the parent path either).
$ defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES
After restarting Finder
, this will show the current path in the titlebar (but
it's not editable).
$ defaults write com.apple.finder ShowPathbar -bool true
Adds a visual representation of thr current path to the bottom of Finder windows.
Notes
Acessing notifications
- StackOverflow: Applescript to read notifications to the Apps in Dock
- AskDifferent: Where are macOS 10.10 notification center settings stored
- Hammerspoon Documentation
- Useful Hammerspoon Tips
Commands
Using Linux most of the time (and using the MacOS commandline almost all of the time to ssh to a Linux computer), these are commands for MacOS.
Routing table
Add a route:
$ route -n add -net ${cidr} ${gw}
Show route table:
$ netstat -rn
Side-note: it's not possible to configure routes in the network settings.
Gatekeeper
To enable or disable Gatekeeper:
$ sudo spctl --master-disable
$ sudo spctl --master-enable
References
OpenCore Legacy Patcher: Run newer versions of Mac OS on older Mac hardware.