Me las arreglé para escribir un simple Python script para hacer exactamente lo que necesitaba:
Básicamente, pulsa la tecla de bloqueo de mayúsculas (que debe desactivarse a través de la configuración del sistema) en intervalos aleatorios, imitando así la interacción del usuario e impidiendo que tu Mac entre en reposo, que se inicie el salvapantallas o que los equipos de MS te muestren como "ausente". Al mismo tiempo, esto no aparece como un programa instalado, por lo que no levantará sospechas.
El script consta de dos archivos, uno de arranque-parada-script y otro que se encarga de la pulsación de teclas. Ambos archivos van en el mismo directorio:
pressy.py
import time
import random
from Quartz.CoreGraphics import CGEventCreateKeyboardEvent, CGEventPost, kCGEventKeyUp, kCGEventKeyDown
from Quartz import kCGHIDEventTap
def simulate_key_press(key_code, delay=0.05):
# Press the key
key_down_event = CGEventCreateKeyboardEvent(None, key_code, True)
CGEventPost(kCGHIDEventTap, key_down_event)
# Add a small delay to simulate a real key press
time.sleep(delay)
# Release the key
key_up_event = CGEventCreateKeyboardEvent(None, key_code, False)
CGEventPost(kCGHIDEventTap, key_up_event)
if __name__ == "__main__":
while True:
# 57 is caps_lock
key_code = 57
# Generate a random interval (in seconds) for the key presses
random_interval = random.uniform(10, 50)
# Simulate the key press
simulate_key_press(key_code)
# Wait for the random interval before the next key press
time.sleep(random_interval)
pressy
#!/usr/bin/env python3
import sys
import os
import subprocess
import signal
from pathlib import Path
pid_file = Path("pressy.pid")
def start():
if pid_file.exists():
print("Pressy is already running.")
return
script_path = Path(__file__).parent / "pressy.py"
process = subprocess.Popen([sys.executable, str(script_path)])
with open(pid_file, "w") as f:
f.write(str(process.pid))
print("Pressy has started.")
def stop():
if not pid_file.exists():
print("Pressy is not running.")
return
with open(pid_file, "r") as f:
pid = int(f.read())
try:
os.kill(pid, signal.SIGTERM)
pid_file.unlink()
print("Pressy has stopped.")
except ProcessLookupError:
print("Pressy process not found. Cleaning up...")
pid_file.unlink()
def status():
if pid_file.exists():
print("Pressy is running.")
else:
print("Pressy is not running.")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: ./pressy <start|stop|status>")
sys.exit(1)
command = sys.argv[1].lower()
if command == "start":
start()
elif command == "stop":
stop()
elif command == "status":
status()
else:
print("Invalid command. Usage: ./pressy <start|stop|status>")
Requisitos:
- Python 3 (creado y probado con Python 3.11)
Instalación:
- Instala pyobjc:
pip3 install pyobjc
- chmod +x pressy
- Tecla de desactivación pulsada: Configuración del sistema -> teclado -> atajos de teclado -> teclas modificadoras -> poner "Tecla Bloq Mayús" en "Sin acción". Obviamente, puede utilizar cualquier otra tecla ( https://web.archive.org/web/20100501161453/http://www.classicteck.com/rbarticles/mackeyboard.php )
- Permitir el acceso a "Terminal" en la configuración de "Accesibilidad" (Se solicitará cuando se inicie por primera vez).
Úsalo:
- Inicio: ./pressy start
- Parada: ./pressy stop
- Estado: ./pressy status
Actualmente se trabaja en una pequeña interfaz de usuario que permite controlar todo con un conjunto de botones de la barra de tareas