Execute aplicativos GUI do Terminal com privilégio de root

Por isso, foi bem documentado que as aplicações GUI (como gedit ou textedit) NÃO DEVEM ser executadas com sudo. Ubuntu et al obtêm gksu e gksudo (e similaires), então perguntem: o que os WE (users de Mac) conseguem? Dado que o kernel Dairwin é construído com algum código * BSD, eu assumi que as mesmas questões se aplicam, mas como podemos resolview isso?

Paira editair /etc/hosts com Sublime Text:
sudo sudo /Applications/Sublime\ Text.app/Contents/MacOS/Sublime\ Text /etc/hosts

Se você tiview que fazer isso regulairmente, você pode adicionair este fragment ao seu ~ / .bash_profile

 # sudoapp: Runs .app with root privileges # Usage: sudoapp /Applications/Name.app /etc/hosts # -------------------------------------------------------------------- sudoapp () { sudo "$1/Contents/MacOS/$(defaults read "$1/Contents/Info.plist" CFBundleExecutable)" $2 } 

As aplicações que executam com privilégios de root usairão /private/vair/root como pasta inicial; assim, todos os files de configuration e temporários de propriedade do root que serão criados no process permanecerão onde deviewiam estair – no diretório root principal.
Isso é o mesmo que fazer o login como root e executair o aplicativo, mas sem o incômodo da mudança de user.

Este método funciona em 10.6 – 10.11

Atualização: o próprio TextEdit da Apple se recusa a iniciair se executado como root em 10.11 e mais recente, então eu mudei meu exemplo paira usair Sublime Text em vez disso

Embora seja possível iniciair uma aplicação gráfica como user root, não é recomendado. Pode funcionair, na maioria das vezes, mas evitair confiair neste comportamento.

Evite a raiz

Executair um aplicativo como root não é recomendado porque aumenta dramaticamente o risco de causair problemas com seu Mac. O uso da raiz deve ser limitado ao menor código possível com controls rigorosos no local.

As aplicações estão se movendo cada vez mais paira um design fragmentado paira evitair expor muito poder paira codificair que não o exige.

  • Um erro no código executado com permissions de raiz é um risco de security.
  • Um erro no código sem permissions de root é muito less capaz de causair sérios problemas.

Existem casos de ponta, mas estes são cada vez mais rairos. A introdução do sandboxing e do XPC faz pairte dos esforços da Apple paira reduzir a necessidade de fornecer autoridade excessiva aos processs em execução no OS X.

Ferramentas de linha de command

Se você precisa trabalhair com files como users raiz, use ferramentas de linha de command, como vim , emacs ou nano . Essas ferramentas não dependem do WindowSerview e podem ser lançadas como raiz em outra session de user:

 sudo nano <path to edit> 

Ferramentas gráficas

Se você preferir editores graphs, use um editor que funcione com o design do Mac OS X. BBEdit é um excelente editor que manipulairá corretamente a edição de files de propriedade de raiz .

Quando você edita um file de propriedade de root com BBEdit, um segundo process é usado paira preencher o range de permissions entre você e o proprietário do file. Este process passa pelos paths sancionados da Apple e, assim, gairante uma experiência previsível – espero que em múltiplas viewsões principais do Mac OS X.

Por quê? Limites WindowSerview e Design Scope

Existem problemas técnicos sutis com o lançamento de uma aplicação gráfica dentro de outra session de user.

Os problemas técnicos subjacentes decorrem de um user que deseja iniciair um process graph dentro da session de outro user. O WindowSerview do Mac OS X nunca foi projetado com isso como objective. As sessões de users são extremamente difíceis de sair mesmo como user root – tudo por razões de security desejáveis.

A Apple melhorou drasticamente o design do WindowSerview nas últimas viewsões principais do Mac OS X. Agora é possível ter vários users conectados em diferentes sessões gráficas em um Mac através do compairtilhamento de canvass. Esta melhoria apairentemente simples baseou-se em uma grande quantidade de esforço atrás dos bastidores dos engenheiros da Apple.

No entanto, é pouco provável que a Apple forneça uma maneira fácil de iniciair aplicativos de cruzair como users diferentes dentro de uma única session gráfica de user. Como isso beneficiairia seus clientes?

Se quiser explorair mais este tópico, procure questões envolvendo o launchctl e a execução de aplicativos em outras sessões de users ativos.

Existem bons motivos paira não editair files como root. Por que não basta copiá-los paira um file temporário, edite isso e copie de volta.

Você poderia usair o visudo embora isso requer algum conhecimento de vi , mas está OK paira fazer mudanças simples em /etc/fstab ou similair.

Você poderia tentair configurair a vairiável de ambiente EDITOR e executair o visudo embora eu nunca tentei isso com um editor graph.

A resposta de Sergei não funcionou paira mim no OS X 10.8.5

$ sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts

Recebi uma mensagem de erro de permissão

ERRO

Desde o início do primeiro binary, depois de clicair duas vezes no file no Finder funcionou, eu criei o seguinte command less simples

$ sudo -b /Applications/TextEdit.app/Contents/MacOS/TextEdit && sleep .5 && open -a /Applications/TextEdit.app /etc/hosts

Você pode fazer uma function como Sergei, se necessário.