Add Main.hs
This commit is contained in:
parent
1cac1b3ba9
commit
204b43ce32
1 changed files with 44 additions and 0 deletions
44
Main.hs
Normal file
44
Main.hs
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
{-# LANGUAGE CPP #-}
|
||||||
|
|
||||||
|
import qualified Graphics.X11.Xlib as X11
|
||||||
|
import Control.Monad (forever)
|
||||||
|
import Control.Concurrent (threadDelay)
|
||||||
|
import System.Posix.Process (forkProcess, createSession, exitImmediately)
|
||||||
|
import System.Posix.Files (setFileCreationMask)
|
||||||
|
import System.Posix.IO (stdInput, stdOutput, stdError, openFd, defaultFileFlags, OpenMode(..), dupTo, closeFd)
|
||||||
|
import System.Posix.Signals (installHandler, Handler(Ignore), sigHUP)
|
||||||
|
import System.Directory (setCurrentDirectory)
|
||||||
|
import System.Exit (ExitCode(..))
|
||||||
|
|
||||||
|
daemonize :: IO () -> IO ()
|
||||||
|
daemonize daemonAction = do
|
||||||
|
_ <- forkProcess $ do
|
||||||
|
_ <- createSession
|
||||||
|
_ <- forkProcess $ do
|
||||||
|
daemonAction
|
||||||
|
exitImmediately ExitSuccess
|
||||||
|
exitImmediately ExitSuccess
|
||||||
|
|
||||||
|
daemonAction :: IO ()
|
||||||
|
daemonAction = do
|
||||||
|
-- Ignore SIGHUP
|
||||||
|
_ <- installHandler sigHUP Ignore Nothing
|
||||||
|
|
||||||
|
-- Change working dir & mask
|
||||||
|
setCurrentDirectory "/"
|
||||||
|
setFileCreationMask 0
|
||||||
|
|
||||||
|
devNull <- openFd "/dev/null" ReadWrite defaultFileFlags
|
||||||
|
mapM_ (\fd -> dupTo devNull fd) [stdInput, stdOutput, stdError]
|
||||||
|
closeFd devNull
|
||||||
|
|
||||||
|
display <- X11.openDisplay ""
|
||||||
|
let root = X11.defaultRootWindow display
|
||||||
|
|
||||||
|
forever $ do
|
||||||
|
X11.resetScreenSaver display
|
||||||
|
X11.flush display
|
||||||
|
threadDelay (30 * 1000000) -- 30 seconds
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = daemonize daemonAction
|
||||||
Loading…
Reference in a new issue