]> gitweb.factorcode.org Git - factor.git/blob - basis/elevate/linux/linux.factor
os-specific refactor appears to work on Linux
[factor.git] / basis / elevate / linux / linux.factor
1 USING: accessors arrays elevate elevate.private elevate.unix
2 elevate.unix.private environment io.launcher kernel locals
3 sequences system ui ;
4 IN: elevate.linux
5
6 <PRIVATE
7 M:: linux elevated ( command replace? win-console? posix-graphical? -- process )
8     already-root? [
9         <process> command >>command 1array ! we are already root: just give a process
10     ] [
11         posix-graphical? ui-running? or "DISPLAY" os-env and [
12             command { "gksudo" "kdesudo" "pkexec" "sudo" } [
13                 prepend-command
14             ] with map :> command-list
15
16             command-list [
17                 replace? [ posix-replace-process ] [
18                     ! need to fix race condition
19                     <process> swap >>command t >>detached run-process
20                 ] if
21             ] map [
22                 [ failed-process? ] all? [
23                     command command-list elevated-failed
24                 ] [ ] if
25             ] keep
26         ] [
27             command replace? posix-elevated ! sudo only
28         ] if
29     ] if ;
30
31 M: linux lowered
32     posix-lowered ;
33
34 PRIVATE>