Agente CtrlStation - MacOS
CtrlStationAgent — MacOS
Está página refere-se ao CtrlStationCtrlStationAgent Agentem paraestações de trabalho macOS
gerenciadas. Ele explica o que o agente faz, como instalá-lo e desinstalá-lo, como conceder as permissões necessárias e como ler os logs em caso de problemas.
O que é?
o agente faz
O CtrlStation AgentCtrlStationAgent é um serviçpequeno agente em segundo plano (sem ícone no Dock e sem janela principal) que aplica a política de sessão da estação de segundotrabalho planoem paranome macOSdo projetadobackend parado monitorarCtrlStation. No Mac de cada usuário, ele:
- Reporta eventos de sessão ao backend: logon, bloqueio de tela, desbloqueio de tela e logout.
- Consulta o backend a
atividadecadada30 segundos (/user/status). Se o backend marcar o usuário como bloqueado, o agente aplica a ação configurada:- Bloquear a tela, ou
- Encerrar a sessão do usuário
e interagir com um servidor de gerenciamento remoto.Suas principais funções são:Monitorar Eventos(logout): Detecta e reporta quando o usuário realiza as seguintes ações:Logon (início da sessão)Logout (fim da sessão)Bloqueio de TelaDesbloqueio de Tela.
Controle de Jornada: A cada 30 segundos, contataReaplica oservidorbloqueioCtrlStationao desbloquear.
para verificar se há comandos remotos para:Bloquear a tela ou efetuar logout do usuário.Exibir notificações de aviso em popup
O agente é configurado comoSe umserviço deusuário(LaunchAgent),bloqueado desbloquear a tela, oqueagentesignificareconsultaqueoelebackend;inicia automaticamente quandose o usuário continuar bloqueado, exibe o aviso "Acesso Bloqueado" e bloqueia novamente (ou faz logout) após ~2 segundos. Se o backend estiver inacessível nesse momento, o usuário permanece desbloqueado (comportamento "fail-open"). - Exibe mensagens enviadas pelo servidor ao usuário em pequenas janelas pop-up não bloqueantes. Cada mensagem é exibida apenas uma vez por máquina.
Ele é executado uma vez por usuário logado, inicia automaticamente no login e paraé reiniciado automaticamente caso pare.
Atenção ao impacto no usuário: quando
ele faz logout.
Requisitos
Sistema Operacional: macOS Ventura (versão13.0)backend bloqueia um usuário, a tela dele será bloqueada ou ele será deslogado — possivelmente de forma repetida até que o backend remova o bloqueio. Certifique-se de que a política do backend esteja correta antes de uma implantação ampla.
2. Requisitos
| Requisito | Detalhe |
|---|---|
| Versão do macOS | macOS 26.0 ou superior (deployment target do build). Macs mais o agente, a menos que o app seja recompilado com um target menor. |
| Privilégios | Direitos de administrador para instalar (o pacote grava em /Applications e /Library). |
| Rede | HTTPS de saída para o backend configurado https://[cliente].ctrlstation.com/api. |
| Permissões | Automação (Apple Events) e Acessibilidade — ver Seção 4. |
| Assinatura | O pacote é assinado com um Developer ID da LAB3 e notarizado, portanto instala sem avisos do Gatekeeper. |
3. Instalação
O agenteentregável é distribuído como um pacote deinstalador instalaçãoassinado e notarizado, por exemplo . .CtrlStationAgent-v1.3.3.pkgatravés de umO link para download é fornecido pela LAB3 ou pelo seu parceiro de revenda
Instalação
A instalaçOpção éA simples— eInterativa guiada.(máquina Siga os passos abaixo:
Execute o InstaladorDê umduploduplo-clique noarquivo.pkg.- Siga o instalador e autentique-se como administrador quando solicitado.
Opção B — Linha de comando / script
sudo installer -pkg /caminho/para/CtrlStationAgent-v1.3.3.pkg -target /
Opção C — MDM (implantação em frota)
Envie o CtrlStationAgent-v1.2.1..pkgque você baixou.
Siga as Instruções Prossiga pelas telas do instalador. Ele copiará os arquivos necessários para aso pastasseu corretasMDM (Jamf, Kandji, Mosyle, Intune, etc.) e configurarádirecione-o às máquinas-alvo. Envie também o serviço.
Aprove a Permissãoperfil de Automaçprivacidade (PPPC) descrito na Seção Ao final da instalação, o sistema solicitará permissão4 para que o agente possafuncione controlarsem eventosprompts de permissão por usuário.
O que o instalador faz
O script postinstall do sistemapacote automaticamente:
- Instala o app em
/Applications/CtrlStationAgent.app. - Grava o arquivo de configuração (
necessárioURL do backend + token de acesso) em/Library/Application Support/CtrlStationAgent/config.jsone restringe sua propriedade/permissões (root:wheel,644). - Instala o LaunchAgent em
/Library/LaunchAgents/com.lab3dvlp.CtrlStationAgent.plist. - Inicia o agente imediatamente para o
bloqueiousuário logado no console naquele momento. Os demais usuários recebem o agente automaticamente no próximo login.
Não é necessário reiniciar.
4. Permissões (importante para implantação silenciosa)
Sob a proteção de tela)privacidade do macOS (TCC), o agente precisa de duas permissões para executar todas as suas ações:
| Permissão | Por quê | Quando é necessária |
|---|---|---|
| Automação → System Events (Apple Events) | Usada para encerrar a sessão do usuário de forma controlada. | Quando a ação do backend é "logout". |
| Acessibilidade | Mecanismo alternativo para bloquear a tela via simulação de tecla, caso o método principal de bloqueio não esteja disponível em determinada versão do macOS. | Raramente — apenas se o método de bloqueio silencioso preferencial falhar. |
Em um Mac não gerenciado, o macOS exibirá um prompt único na primeira vez que o agente tentar essas ações (por exemplo, "CtrlStationAgent deseja controlar o System Events"). VocêO deveusuário precisa clicar em "OK"OK / ativar a opção em Ajustes do Sistema → Privacidade e Segurança.
CriePara o Arquivo de Configuraçimplantação em frota, pré-aprove essas permissões com um perfil PPPC (PassoPrivacy Obrigatório)Preferences Policy Control) via MDM, Opara agenteque nãos usuários nunca vejam prompts e a aplicação funcionaráda sempolítica asnunca informaçõesseja do servidor. Você precisa criar este arquivo manualmente:bloqueada:
(Bundle ID)Caminho ExatoIdentificador::~/.config/CtrlStationAgent/config.jsoncom.lab3dvlp.CtrlStationAgent- Tipo de identificador: Bundle ID
- Requisito de código (code requirement):
identifier "com.lab3dvlp.CtrlStationAgent" and anchor apple generic and certificate leaf[subject.OU] = "S9DE935KXJ" (O instalador abriráServiços apastapermitir:~/.config/CtrlStationAgentSystemPolicyAllFilespara você. Se— não,ocrie-aémanualmente).necessário.- Apple
Conteúdo do ArquivoEvents(use—o template abaixo, substituindopermitir, comseusdestinodadoscom.apple.systemevents. - Acessibilidade —
{ "apiURL": "https://[empresa].ctrlstation.com/api", "accessToken": "[disponivel em configurações - licença]" }JSONpermitir.
ApósEmcriaralgumas versões do macOS, a Acessibilidade não pode ser concedida por um payload PPPC isolado; a maioria dos MDMs oferece um controle dedicado de "Acessibilidade" no editor de PPPC. Conceda por lá.
5. Verificar se está em execução
Execute na máquina-alvo (como o arquivousuário logado):
config.json,# O processo está ativo? pgrep -lf CtrlStationAgent # Status do LaunchAgent (procure por "state = running" e oserviço, que já está rodando, o detectará e começará a funcionar normalmente.
Desinstalação"state|program"
Para remover o agente, basta apagarcaminho domenuprograma) launchctl print "Apps"gui/$(idou-u)/com.lab3dvlp.CtrlStationAgent"apagar|ogrepdiretório-E/Applications/CtrlStationAgent.app
Funcionamento e Logs
Como Funciona
-
O agente
iniciaestájuntorodandocomsestate = runninge um caminho de programa/Applications/CtrlStationAgent.app/Contents/MacOS/CtrlStationAgent.Confirme se a
suaconfiguraçãosessãofoi aplicada corretamente (admin):sudo cat "/Library/Application Support/CtrlStationAgent/config.json"
6. Verificar os logs
O agente registra através do sistema de
logsusuário.unificado - do
ElemacOSpermanece ativo em segundo plano, consumindo(nãomínimo de recursos. Toda a comunicação com a API é registrada noshá arquivos de logparaseparados).fins de depuração.
Verificando os Logs
Para verificar os logs, utilizeUse o comando:
Daou últimao hora:comando log, filtrando pelo subsistema do agente.
# Acompanhamento ao vivo — deixe rodando e então bloqueie/desbloqueie ou aguarde um heartbeat:
log stream --predicate 'subsystem == "com.lab3dvlp.CtrlStationAgent"'
# Histórico recente (última hora). Adicione --debug para incluir as linhas de nível
# debug (heartbeats, etc.), que NÃO são persistidas por padrão:
log show --debug --predicate 'subsystem == "com.lab3dvlp.CtrlStationAgent"' --last 1h
Você pode restringir a uma área usando o campo category. Categorias disponíveis: app, api, events, heartbeat, session, notifications, action, config.
# Apenas eventos de sessão e atividade de aplicação de política:
log stream --predicate 'subsystem == "com.lab3dvlp.CtrlStationAgent" AND (category == "events" OR category == "action")'
No Console.app: abra-o, inicie o streaming e digite o subsistema com.lab3dvlp.CtrlStationAgent na barra de busca (defina o filtro como "Subsistema").
O que você normalmente verá: Evento detectado: Tela Bloqueada/Desbloqueada, Executando heartbeat..., API confirmou bloqueio; reaplicando em 2s e Exibindo notificação customizada: … para mensagens do servidor.
7. Solução de problemas
| Sintoma | Verificação |
|---|---|
| Agente não está em execução | pgrep -lf CtrlStationAgent. Se vazio, confirme que o plist existe em /Library/LaunchAgents/com.lab3dvlp.CtrlStationAgent.plist e o app em /Applications/CtrlStationAgent.app. Peça ao usuário para sair/entrar novamente, ou inicie manualmente (Seção 8). |
| Agente inicia e encerra | Configuração ausente/inválida. O agente encerra se o config.json estiver ausente ou malformado. Verifique /Library/Application Support/CtrlStationAgent/config.json. Consulte a categoria de log config. |
| Eventos não chegam ao backend | Acessibilidade de rede/API. Verifique as categorias de log api e events em busca de erros; confirme o HTTPS de saída para a URL do backend. |
| Ação de logout não faz nada | Permissão de Apple Events (Automação) não concedida. Ver Seção 4. Verifique as categorias action/session. |
| A tela não bloqueia | Raro — verifique a categoria session; o mecanismo alternativo por tecla requer Acessibilidade (Seção 4). |
| Mensagens do servidor não aparecem | Cada mensagem é exibida apenas uma vez por máquina (registrada no arquivo por usuário da Seção 9). Uma mensagem já vista não reaparecerá. |
8. Iniciar / parar / reiniciar o agente manualmente
Execute como o usuário logado (estes comandos atuam na sessão GUI desse usuário):
# Parar (descarregar)
launchctl bootout "gui/$(id -u)/com.lab3dvlp.CtrlStationAgent"
# Iniciar (carregar)
launchctl bootstrap "gui/$(id -u)" /Library/LaunchAgents/com.lab3dvlp.CtrlStationAgent.plist
# Reiniciar = bootout e depois bootstrap
Para atuar na sessão de outro usuário, substitua $(id -u) pelo UID numérico daquele usuário (descubra-o com id -u <nome_do_usuario>); esses comandos exigem admin/root.
9. Desinstalação
Não há pacote desinstalador; remova os componentes manualmente ou via script no MDM.
# 1. Pare o agente para o usuário logado (repita por usuário logado / UID)
launchctl bootout "gui/$(id -u)/com.lab3dvlp.CtrlStationAgent" 2>/dev/null
# 2. Remova a definição do LaunchAgent (admin)
sudo rm -f /Library/LaunchAgents/com.lab3dvlp.CtrlStationAgent.plist
# 3. Remova o aplicativo (admin)
sudo rm -rf /Applications/CtrlStationAgent.app
# 4. Remova a configuração do sistema (admin) — isto apaga o token do backend
sudo rm -rf "/Library/Application Support/CtrlStationAgent"
# 5. Esqueça o recibo do instalador (admin)
sudo pkgutil --forget com.lab3dvlp.CtrlStationAgent
# 6. Remova os dados por usuário (execute para CADA conta que tenha feito login)
rm -rf "$HOME/Library/Application Support/CtrlStationAgent"
Após a remoção, opcionalmente remova o perfil PPPC do MDM, caso tenha enviado um.
Remover o plist do LaunchAgent e o app e, em seguida, fazer o usuário sair/entrar novamente já é suficiente para interromper a aplicação da política. Os passos 4 a 6 são limpeza.
10. Referência
| Item | Valor |
|---|---|
| Bundle do app | /Applications/CtrlStationAgent.app |
| Identificador do bundle / label do LaunchAgent | com.lab3dvlp.CtrlStationAgent |
| Plist do LaunchAgent | /Library/LaunchAgents/com.lab3dvlp.CtrlStationAgent.plist |
| Arquivo de configuração | /Library/Application Support/CtrlStationAgent/config.json |
| Dados por usuário (mensagens já vistas) | ~/Library/Application Support/CtrlStationAgent/ |
| API do backend | https://picpay.ctrlstation.com/api (definida no config.json) |
| Subsistema de log | com.lab3dvlp.CtrlStationAgent |
| Time (team) do Developer ID | S9DE935KXJ (LAB3 Desenvolvimento de Software Ltda ME) |
| Intervalo do heartbeat | 30 segundos |
| Início/reinício automático | LaunchAgent RunAtLoad + KeepAlive |