Respuestas:
Hay una sección dedicada a esto en → Preferencias del sistema → Teclado :
Abra las teclas modificadoras ... y reasignelas desde aquí:
Esta configuración es específica para cada teclado externo que haya conectado. Se "pegarán" entre reinicios, así como cada vez que desconecte un teclado externo y vuelva a enchufarlo.
La solución integrada de macOS no funcionó para mí porque no hay opción para seleccionar un teclado diferente.
Para macOS Sierra a Mojave (versión actual en este momento), Karabiner-Elements hace exactamente esto. Puede encontrar la página de GitHub en https://github.com/tekezo/Karabiner-Elements .
Se ejecuta en segundo plano. En las preferencias, configura el dispositivo de destino para la modificación y recuerda la configuración. Tengo un teclado bluetooth (Logitech G613) donde solo se intercambian CMD y ALT de ese teclado. Yo uso este teclado entre mi PC y Mac.
A continuación puede ver un ejemplo de Karabiner-Elements v12. No muestra mi G613 porque no está conectado en este momento.
Uso Karabiner para mi KB externo, creo que es la única utilidad actualmente disponible, pero Google es tu amigo. En cuanto a la segunda pregunta, que yo sepa, solo si puede encontrar una manera de ejecutar Karabiner cuando se conecta el KB externo, pero no de otra manera. HTH