Direi che non c'è modo di farlo. Ma posso spiegare perché lo penso. Quando si utilizza NSUserDomain si restringe alla struttura di file dell'utente attivo. Quindi, come hai detto tu quando accedi ai file come utente root, usa invece le directory di root. Non poteva assumere le directory di un altro utente perché se ci fossero più utenti non saprebbe che lo stava eseguendo in primo luogo e quindi non sa quale directory desktop accedere.
Ho trovato un modo per aggirare questo che dovrebbe funzionare per voi. Invece di usare lo NSSearchPathForDirectoriesInDomains
dovrai costruire il tuo percorso usando le variabili d'ambiente. Quando si utilizza sudo
su OS X, non sovrascrive la variabile $HOME
in modo che mantenga la directory home del chiamante. È possibile accedere a tutte le variabili di ambiente con
[[NSProcessInfo processInfo] environment];
e ottenere $HOME
con
[[[NSProcessInfo processInfo] environment] objectForKey:@"HOME"];
Così si può afferrare $HOME
come una stringa e aggiungere /Desktop
ad esso. Questo non funzionerebbe correttamente in una sandbox ma, visto che stai parlando di eseguirlo come root, presumo che tu non lo sia.
fonte
2013-07-05 16:17:26
probabilmente è possibile ottenere gli utenti attuali UID piuttosto che l'effettivo UID ... 'man getuid' –
poi trovare il dir casa con: uno di questi' man getpwuid' –