Tips de macOS: defaults, chflags y limpieza de directorios
Compilando aquí algunas anotaciones sueltas que tengo sobre macOS — ajustes que hago siempre que configuro una máquina nueva o que necesito aplicar de nuevo después de una actualización.
Limpiar basura de directorios
Cuando descargás un zip o recibís una carpeta compartida, suele venir acompañada de una serie de archivos auxiliares que no interesan — .DS_Store del Finder, Thumbs.db de Windows, miniaturas e índices de cámaras, etc. Para limpiar todo de una vez:
1
2
3
4
5
6
7
find . -name '.DS_Store' -type f -delete
find . -name 'Thumbs.db' -type f -delete
find . -name "*.THM" -type f -delete
find . -name "*.ini" -type f -delete
find . -name "*.LRV" -type f -delete
find . -name "*.db" -type f -delete
find . -name "*.nomedia" -type f -delete
Después de eso, aprovechá para eliminar directorios vacíos — primero listar para verificar, luego borrar:
1
2
3
4
# Listar
find . -type d -empty
# Borrar
find . -type d -empty -delete
Y un truco que siempre uso para entender qué hay dentro de una carpeta antes de tocarla: listar todas las extensiones de archivo distintas presentes:
1
find . -type f -name '*.*' | sed 's|.*\.||' | sort -u
Útil para decidir qué limpiar o qué procesar en lote.
Ajustes del sistema con defaults write
defaults es el utilitario de línea de comandos que lee y escribe las preferencias de macOS. Buena parte de las configuraciones que encontrarías escondidas en Preferencias (o que ni aparecen en la UI) son accesibles desde aquí.
Cmd+Tab en todos los monitores
Por defecto, el selector de aplicaciones del Cmd+Tab solo aparece en el monitor principal. Si usás múltiples displays, esto es molesto — estás enfocado en el monitor secundario, presionás Cmd+Tab y el selector aparece del otro lado del escritorio. Para que aparezca en el monitor donde está el cursor:
1
2
defaults write com.apple.Dock appswitcher-all-displays -bool true
killall Dock
killall Dock reinicia el Dock para que la configuración se aplique.
Deshabilitar smart quotes y smart dashes
macOS reemplaza automáticamente " por " " y -- por — mientras escribís. Esto es genial para escribir en el Pages, y pésimo para escribir código o markdown en cualquier otro lugar. Para desactivarlo globalmente:
1
2
3
4
defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
defaults write com.apple.TextEdit SmartQuotes -bool false
defaults write com.apple.TextEdit SmartDashes -bool false
NSGlobalDomain afecta el comportamiento por defecto de todas las apps — pero algunas apps ignoran este global y mantienen su propia configuración. Para forzarlo en todas las apps registradas en el sistema, podés recorrerlas:
1
2
3
4
5
6
7
8
9
for d in $(defaults domains | tr -d ,); do
osascript -e "app id \"$d\"" &>/dev/null || continue
defaults write $d SmartQuotes -bool false
# defaults write $d SmartDashes -bool false
# defaults write $d SmartLinks -bool false
# defaults write $d SmartCopyPaste -bool false
# defaults write $d TextReplacement -bool false
# defaults write $d CheckSpellingWhileTyping -bool false
done
osascript -e "app id \"$d\"" filtra solo los dominios que corresponden a apps reales — sin esto, estarías escribiendo configuración en dominios de sistema que no tienen app asociada. Dejé las otras líneas comentadas porque yo mismo solo deshabilito las smart quotes; pero podés activarlas según el gusto.
Bloquear el /etc/hosts con chflags
Varios malwares y hasta algunos instaladores de software tienen la costumbre de modificar el /etc/hosts. Si querés bloquear el archivo de modo que ni sudo pueda editarlo sin desbloquearlo antes:
1
sudo chflags uchg /etc/hosts && sudo chflags schg /etc/hosts
uchg→ user immutable flag (cualquier usuario queda impedido de modificar)schg→ system immutable flag (ni root modifica sin desbloquear; solo removible en single-user mode)
Para desbloquear cuando necesitás editar:
1
sudo chflags nouchg /etc/hosts && sudo chflags noschg /etc/hosts
Vale para cualquier archivo, no solo hosts. Es una capa de protección extra contra modificación accidental o maliciosa.
Deshabilitar que Music.app se abra solo
Este era el que más me molestaba: presionar play en los auriculares y Music.app se abría de la nada, aunque estuviera escuchando Spotify o YouTube. Intenté varias aproximaciones vía defaults, launchctl, scripts de Automator — nada funcionó de forma confiable en versiones recientes de macOS. Apple bloqueó cada vector que existía.
La solución que funcionó para mí fue instalar BetterTouchTool y mapear las teclas de medios a un no-op (o a la app que realmente quiero controlar). No es una solución nativa, pero es la única que sobrevivió a las actualizaciones del sistema.
Anotando esto aquí más como un recordatorio: no vale la pena gastar tiempo buscando el defaults write mágico que deshabilita esto. Ya no existe. Usá una herramienta externa.