mountctl/0000770000175000017500000000000013140624624012272 5ustar thomasthomasmountctl/usr/0000770000175000017500000000000013140616371013103 5ustar thomasthomasmountctl/usr/share/0000770000175000017500000000000013407420007014200 5ustar thomasthomasmountctl/usr/share/polkit-1/0000770000175000017500000000000013140616371015645 5ustar thomasthomasmountctl/usr/share/polkit-1/actions/0000770000175000017500000000000013411461310017275 5ustar thomasthomasmountctl/usr/share/polkit-1/actions/LocalExtPermissions.policy0000644000175000017500000000327513411461167024511 0ustar thomasthomas yes yes yes /usr/local/bin/mountctl auth_admin auth_admin yes /usr/local/bin/autoupdate true auth_admin auth_admin yes /usr/local/bin/selnic true mountctl/usr/share/polkit-1/actions/ReadMe0000644000175000017500000000075013411461310020362 0ustar thomasthomasDie Rechte MÜSSEN wie folgt gesetzt sein. Die Policies sind normalerweise "monitored" und Veränderungen werden meisten automatisch erkannt. Unter Umständen, falsch es nicht funktioniert, ist aber nach der Einrichtung ein Re-Login oder auch ein Neustart erforderlich. ls /usr/share/polkit-1/actions insgesamt 804K drwxr-xr-x 2 root root 4,0K 2017-07-28 10:30 . drwxr-xr-x 3 root root 4,0K 2017-03-05 16:52 .. -rw-r--r-- 1 root root 5,9K 2016-12-29 18:29 LocalExtPermissions.policy mountctl/usr/local/0000770000175000017500000000000013140624037014173 5ustar thomasthomasmountctl/usr/local/bin/0000770000175000017500000000000013140625154014744 5ustar thomasthomasmountctl/usr/local/bin/sessionctl0000644000175000017500000000723013401012007017045 0ustar thomasthomas#!/bin/bash #=========================================================================================================================================== # Descripton : Launch Processes after User is logged in (PAM-Event) # # Script-Name : sessionctl # Created by : TomL*thlu.de # Version : V.2.0 # Date : 02.12.2018 # Lizenz : GNU GPL3 # # Dependent on : /etc/pam.d/common-session #=========================================================================================================================================== if [ "$3" == "debug" ]; then PAM_USER=$1 PAM_SERVICE="login" [ "$2" == "o" ] && PAM_TYPE="open_session" [ "$2" == "c" ] && PAM_TYPE="close_session" fi echo "started! PAM_USER=$PAM_USER PAM_TYPE=$PAM_TYPE PAM_SERVICE=$PAM_SERVICE" | systemd-cat -t "thlu:$(basename $0)" -p info if [ "$PAM_USER" == "root" ]; then echo "further processing stopped because root-login" | systemd-cat -t "thlu:$(basename $0)" -p info exit 0 fi #-------------------------------------------------------------------------------------------------------------------------------------------------- case $PAM_SERVICE in # kein regulärer Login über Desktop-Environment su|sshd|polkit-1) echo "Terminated due to PAM_SERVICE=$PAM_SERVICE" | systemd-cat -t "thlu:$(basename $0)" -p info exit 0 ;; #-------------------------------------------------------------------------------------------------------------------------------------------------- # lightdm, mdm (Mint-DM), login *) ctlfile="/var/run/sessionctl.user" pam_user="" sessioncnt=0 if [ -f "$ctlfile" ]; then tmp=$(grep -i pam_user $ctlfile | awk -F '=' '{ print $2 }') [ -n "$tmp" ] && tmp=${tmp// /} [ -n "$tmp" ] && pam_user=$tmp tmp=$(grep -i sessioncnt $ctlfile | awk -F '=' '{ print $2 }') [ -n "$tmp" ] && tmp=${tmp// /} [ -n "$tmp" ] && sessioncnt=$tmp else pam_user=$PAM_USER fi if [ "$pam_user" != "$PAM_USER" ]; then echo "new user not matching: $pam_user != $PAM_USER, skip processing mountctl.service" | systemd-cat -t "thlu:$(basename $0)" -p info exit 0 fi if [ "$PAM_TYPE" == "open_session" ]; then (( sessioncnt++ )) echo -e "pam_user = $PAM_USER\nsessioncnt = $sessioncnt" >$ctlfile if [[ sessioncnt -gt 1 ]]; then echo "user already logged in: pam_user=$pam_user new sessioncounter=$sessioncnt" | systemd-cat -t "thlu:$(basename $0)" -p info else [ "$(/bin/systemctl is-active mountctl@$pam_user.service)" == "inactive" ] && /bin/systemctl start mountctl@$pam_user.service & fi elif [ "$PAM_TYPE" == "close_session" ]; then if [[ sessioncnt -eq 0 ]]; then echo "close_session pam_user=$pam_user no active session found" | systemd-cat -t "thlu:$(basename $0)" -p info else (( sessioncnt-- )) echo "close_session new sessioncounter=$sessioncnt" | systemd-cat -t "thlu:$(basename $0)" -p info echo -e "pam_user = $PAM_USER\nsessioncnt = $sessioncnt" >$ctlfile [[ sessioncnt -gt 0 ]] && exit 0 [ "$(/bin/systemctl is-active mountctl@$pam_user.service)" == "active" ] && /bin/systemctl stop mountctl@$pam_user.service & /bin/rm $ctlfile fi fi ;; esac exit 0 #-------------------------------------------------------------------------------------------------------------------------------------------------- mountctl/usr/local/bin/serverctl0000644000175000017500000000252713401012434016700 0ustar thomasthomas#!/bin/bash #============================================================================================= # Description : Check if given server is reachable # # Script-Name : serverctl # Version : 2.0 # Date : 02.12.2018 # Written by : TomL*thlu.de # Licence : GNU GPL3 #============================================================================================= [ -z "$1" ] && Server="8.8.8.8" || Server=$1 echo "active/running Server=$Server" | systemd-cat -t "thlu:$(basename $0)" -p "info" timeout=85 Diff=0 HomeNetIsConnect=-1 Start=$(date +%s); while [ true ]; do /bin/ping -c1 -W1 -q $Server &>/dev/null HomeNetIsConnect=$? [ $HomeNetIsConnect -eq 0 ] && break /bin/sleep 0.5 End=$(date +%s); Diff=$((End-Start)) [[ Diff -gt timeout ]] && break done rc=0 if [[ $HomeNetIsConnect -eq 0 ]]; then echo "Host $Server is reachable! (RC:$HomeNetIsConnect, after $Diff Seconds wait)" | systemd-cat -t "thlu:$(basename $0)" -p "info" else echo "Host $Server is not reachable! (RC:$HomeNetIsConnect, after $Diff Seconds wait)" | systemd-cat -t "thlu:$(basename $0)" -p "err" rc=1 fi echo "Successful terminated with exitcode=$rc" | systemd-cat -t "thlu:$(basename $0)" -p "info" exit $rc #============================================================================================= #EOFmountctl/usr/local/bin/mountctl0000644000175000017500000002333113430021706016534 0ustar thomasthomas#!/bin/bash #=========================================================================================================================================== # Description : Controlled user-binded mounting and unmounting of network drives # # Script-Name : mountctl # Written by : TomL*thlu.de # Version : 2.3.3 # Date : 10.02.2019 # Lizenz : GNU GPL3 # # Dependencies : dialog, PAM->common-session, polkit->Permission, serverctl, sessionctl #=========================================================================================================================================== Action="" CurrUser="" UsersGroups="" aMountUnits=() aUserGrps=() [ -n "$1" ] && Action=$1 [ -n "$2" ] && CurrUser=$2 #=========================================================================================================================================== ErrExit() { local tmp="" [ $1 -eq 1 ] && tmp="Canceled! User=$CurrUser not exist or no user defined or root as user (root is not a samba-user)!" [ $1 -eq 2 ] && tmp="Nothing to do! No mounts defined." [ $1 -eq 3 ] && tmp="Job canceled, wrong or missing parameters. See: journalctl -b | grep mountctl" [ $1 -eq 4 ] && tmp="Job canceled, resume Network failed" [ $1 -gt 0 ] && /bin/echo "$tmp" | systemd-cat -t "thlu:$(basename $0)" -p "err" /bin/echo -e "$tmp\n\nUsage: $0 {start | stop | poweroff | reboot | suspend} {existing username}" exit 1 } #=========================================================================================================================================== IsGroupOK() { [ -z "$1" ] && return 0 for i in "${!aUserGrps[@]}"; do [[ "$1" =~ "${aUserGrps[i]}" ]] && return 0 done return 1 } #=========================================================================================================================================== SetupOrReleaseMounts() { local action="" # 0=mount, 1=umount [ -n "$1" ] && action=$1 || return 1 for x in ${!aMountUnits[*]}; do tmp=${aMountUnits[$x]} munit=$(awk -F ':' '{ print $1 }' <<< $tmp) # links von ':' munit=$(basename "$munit") munit="${munit//'@'/@$CurrUser}" # Replace @ durch @Username mgrp=$(awk -F 'mountctlgroup=' '{ print $2 }' <<< $tmp) # rechts von 'mountctlgroup=' IsGroupOK "$mgrp" if [[ $? -eq 0 ]]; then if [[ $action -eq 0 ]]; then if [ ! "$(/bin/systemctl is-active $munit)" == "active" ]; then /bin/echo "start $munit" | systemd-cat -t "thlu:$(basename $0)" -p "info" /bin/systemctl start $munit fi else if [ "$(/bin/systemctl is-active $munit)" == "active" ]; then /bin/echo "stop $munit" | systemd-cat -t "thlu:$(basename $0)" -p "info" /bin/systemctl stop $munit fi fi /bin/sleep 1 else /bin/echo "start $munit failed! group-permissions denied" | systemd-cat -t "thlu:$(basename $0)" -p "info" fi done return 0 } #=========================================================================================================================================== while read line; do # Relevante Units mit 'mountctlgroup' ermitteln [ -n "$line" ] && aMountUnits+=( "$line" ) done < <(/bin/grep -i "mountctlgroup" /etc/systemd/system/*.service; echo "") if [ -z "$CurrUser" ]; then # kein user übergeben? if [ -s /var/run/mountctl.user ]; then CurrUser=$(cat /var/run/mountctl.user) # mounts aktiv? ja, gleichen user erneut verwenden elif [ -s /var/run/sessionctl.user ]; then # oder CurrUser=$(grep -i pam_user /var/run/sessionctl.user | awk -F '=' '{ print $2 }') # neue anmeldung? neuen user übernehmen CurrUser=${CurrUser// /} else CurrUser=$USER fi fi [ -n "$CurrUser" ] && [ -z "$(cat /etc/passwd | grep ^$CurrUser:)" ] && ErrExit 1 # gültiger user? [ -z "$CurrUser" ] && ErrExit 1 [ "$CurrUser" == "root" ] && ErrExit 1 /bin/echo "active/running Action=$Action CurrUser=$CurrUser" | systemd-cat -t "thlu:$(basename $0)" -p "info" tmp=$(/usr/bin/groups "$CurrUser" 2>/dev/null) tmp=$(awk -F ':' '{ print $2 }' <<< $tmp) aUserGrps=(${tmp// / }) [ ${#aMountUnits[*]} -eq 0 ] && ErrExit 2 #------------------------------------------------------------------------------------------------------------------------------------------- # start = called after login from pam_session-Exec # resume = called after suspend from suspend-resume.service rc=0 case $Action in start) /bin/echo "Processing mount ($Action)" | systemd-cat -t "thlu:$(basename $0)" -p "info" SetupOrReleaseMounts 0 [ "$Action" == "start" ] && echo "$CurrUser" >/var/run/mountctl.user ;; #------------------------------------------------------------------------------------------------------------------------------------------- stop) sync /bin/echo "Processing umount ($Action)" | systemd-cat -t "thlu:$(basename $0)" -p "info" SetupOrReleaseMounts 1 while read line do /bin/umount $line -f 2>&1 done < <(/bin/cat /proc/mounts | grep // | awk -F ' ' '{ print $1 }') [ -f /var/run/mountctl.user ] && /bin/rm /var/run/mountctl.user /bin/sleep 1 ;; #------------------------------------------------------------------------------------------------------------------------------------------- logout) /bin/echo "Processing logout: $CurrUser" | systemd-cat -t "thlu:$(basename $0)" -p "info" export PAM_TYPE="close_session" export PAM_USER="$CurrUser" /usr/local/bin/sessionctl /bin/loginctl terminate-session $(/bin/loginctl | grep $CurrUser | awk -F ' ' '{ print $1 }') ;; #------------------------------------------------------------------------------------------------------------------------------------------- poweroff) [ -f /usr/bin/dialog ] && /usr/bin/dialog --infobox "Hinweis:\n\nDer Computer wird in wenigen Sekunden ausgeschaltet." 7 70 /bin/systemctl stop mountctl@$CurrUser /bin/systemctl poweroff -i >/dev/null 2>&1 ;; #------------------------------------------------------------------------------------------------------------------------------------------- reboot) [ -f /usr/bin/dialog ] && /usr/bin/dialog --infobox "Hinweis:\n\nDer Computer wird in wenigen Sekunden neu gestartet." 7 70 /bin/systemctl stop mountctl@$CurrUser /bin/systemctl reboot -i >/dev/null 2>&1 ;; #------------------------------------------------------------------------------------------------------------------------------------------- suspend) [ -f /usr/bin/dialog ] && /usr/bin/dialog --infobox "Hinweis:\n\nDer Computer wird in wenigen Sekunden in den Ruhezustand versetzt." 7 70 nics=($(ip link show | /bin/grep broadcast -i | grep "state UP" | awk -F ': ' '{ print $2 }' | sort -b -g)) for iface in "${nics[@]}"; do if [[ $iface =~ ^e ]]; then if [[ ! "$(readlink /sys/class/net/$iface)" =~ "devices/virtual" ]]; then echo "$iface" >/var/run/mountctl.ifce break fi fi done /bin/systemctl stop mountctl@$CurrUser /bin/systemctl stop serverctl /bin/systemctl suspend -i >/dev/null 2>&1 ;; #------------------------------------------------------------------------------------------------------------------------------------------- resume) if [ -s /var/run/mountctl.ifce ]; then iface=$(cat /var/run/mountctl.ifce) # get active interface before suspend ip4="" for ((n=0;n<30;n++)); do # up to 30 seconds wait until the network is resumed ip4=$(ip -4 -o addr show $iface | grep "scope global" -m 1 | cut -d\ -f 7 | cut -d/ -f 1) [ -n "$ip4" ] && break || sleep 1 done if [ -z "$ip4" ]; then # network is dead? /bin/echo "Network failed, restarting" | systemd-cat -t "thlu:$(basename $0)" -p "info" /sbin/ip link set dev "$iface" down /bin/sleep 3 /sbin/ip link set dev "$iface" up /bin/systemctl is-active systemd-networkd && /bin/systemctl restart systemd-networkd /bin/systemctl is-active networking && /bin/systemctl restart networking /bin/systemctl is-active ifup@$iface && /bin/systemctl restart ifup@$iface fi fi /bin/systemctl start serverctl && /bin/sleep 5 || ErrExit 4 /bin/systemctl start mountctl@$CurrUser || ErrExit 4 /bin/echo "Network successfully resumed" | systemd-cat -t "thlu:$(basename $0)" -p "info" ;; #------------------------------------------------------------------------------------------------------------------------------------------- *) ErrExit 3 ;; esac /bin/echo "Successful terminated with exitcode=$rc" | systemd-cat -t "thlu:$(basename $0)" -p "info" exit $rc #=========================================================================================================================================== #EOF mountctl/usr/local/share/0000770000175000017500000000000013140624466015303 5ustar thomasthomasmountctl/usr/local/share/Icons/0000770000175000017500000000000013407417777016371 5ustar thomasthomasmountctl/usr/local/share/Icons/poweroff.png0000644000175000017500000003611412574030134020714 0ustar thomasthomasPNG  IHDR>a<IDATx^}Wy{Δ[]e 6.~ @ `  L I!fSc vBwP%V[$Ve{m;9{{we|ϔ;w{Kc˵LE oŸ$119xNJcK,.99LH 3 :`  J()K\s 9 Ri X CbJmzӪZ %/ѨD U@& `(H@K-˷ 0VP'0m۰qݸ~t?0ǣUaL{D`Y1Zj~˕sVFV]%K@k :`TwJ΁OFE0~خ s<"XZաE砢뫶n=_b/GP1zHV[Բ4 tU }ʖU砶 a(`%7 oHAOuG1PaD~Ɛ\K;xG޺䷿Ų8H<9)?sTXc. Mx/2:W@%Ъ%.D?x o]ʻ??\i2O|ATv*P{.8q>O .<0ߨ]UiWuu[^N-H @ZP8W"G< aN'x䩁4v/GEc#wn_9gXsĖ7'E^;)֚+֠IEmq zfK0p !@/{#F>L++/H{dk-7,]d`oE Hh[($BHm} eȧ\ܳgHmGqP؀9g#w_KEqh;) 7PDnk[9xygwjZL!R(Rf9^TH h.ksO=@_v,9˶U"ʊvۙ񶻱k*OGLy 6S߈zmHVUrp /',d3TiPNf\Mdk@VsQEF>Pq8҉ܑ.ݑ} !z0, U%(nܵчn:hhʁ-LbcÍW7:,ӂgxUU9 c`SqhI\R y"̯pD~{2Ƅ z$U+qk>₯O(p \ s & #W|XSբpF)QowKX! qU)'v%A*`z@@,Z2B.HQu >SeJokŔ*- 8H&@,k7 ~f.'XA^$ {2MBd.`rY`xt/l ‡/qHc#jo[pQ^ y.(3Z&< ;*j2lK[!KP@$!eBnm@mZ$ :8!bgvdG{{P|]oyG1\jNA il珯(oiS0}ػ/k4#f`'cLȾ,!nrx_%dQ[VqgF`z8| 0аX G*QNk#N\k,ZP^Y-L)A8BUşcs|n Q=\77m>-LGt4tƞmwj{<r.6)V́S oֶVĕ$ 3?(_~r_z?|QM1gʾ~K X~{&4J"p7KM~#>c{QhZ*8eSNȼ_[x vԒHso6l~> ~J *>878;6 aEKRrS vELZm-^2uxS_cٟ2 1veU["SAh}6!PMc\JcxU6D>+K6Eu.H"F,  ؞c-Ҍ7{/{j2qKV@38u6kO~iKNY⯄tR)6_REfxȃ;g, օz\\y V*GEQ ǠR}Iog N Xy%jbFd h>.^!Fe^A[A@x#K &SA@eAOLN^)XMk߀=Wմ6aڵ}}nY+. ^ $B `sPN, xͅV!(Y1U|j@ (f*@dc={fa4 7OӺ`ĞQLeaYEp?|)zȺ3\| дށzH&>],9)@.^jU|%@"Uwoxl`\/PE~6s*(VWʫ8{gdє*PoUaWcMͰ,o2gaA@QJ@*+yǍP~Yaߖ.=Rul94DN\NvSW_WPut_?߾[z#'~0⅗T@MZm ^1y%gO L02gZ^tj  ?᳼&'.= nڽ%-B>~ a#7I^Z̈K}Z8߸6% GɚePjXqR#W{wQDP~ؘ@ k0qAFAz Hs.>Y^`TkzeriW`6F*{߇@\ŽgaMMV,_ӄV]k&~=c }*4lﴼ=WtW!"٬?ͅ|^ dW1Gp5\5סCb؉DJV9iXTA#^ߨ{4 eȫX9 *(R+ 5<:3XaC/r˶V/RX9 WXr*"k֡oaƿGvvX_?WHe%x{$ *WXz &a7SXߜt+/AĜ4 Rki ,77bj6h/D7kH Uh9#)QV%8t^eu6sBJ4AnZW?曅=m$**z`;$x: dc#V%C?%?aP,c_-E iSKi1iwĖucƆN8&(! QP*\Ys":ئ'i[چ.W ZF561S(֫c]غhޣŊAZzs@Z ꎢr*ȍ oB_9 D sxG.kdy.qds40/__2"NQ9z,RAa" XNxT ]܉4:ieտ,1r8Phh H>( :0WjtOAT'5Ë&hm*PK]iS=3v-ߗ/gknQ&Fum@fv$6$_טu}&ͯ0F( dkiXM,h6ǖ@˓xX3@5*O-q XNhx%hL~C655ЪT{OϮ-Pj'.D۰ᒋP7cټ>ʔ5Gp|Lsg̾c6qsfI0钭\x`3qJ\vdE!V#@H 8jFu I:*O"f|&F^+V:|S]ԡ~w9[f Q5zw1=}(S%/`;d\Rξ3Mș@2ߚ!2 T$#u,(g鱒JҘ $ܛmiAo(WQCO4@AHxTb Ԥ0FFTk0[-D}̽`g|M Pt#Qѷ7_(+M*$+Fmx'((&6mմ0aH~K/#̧(A=L)-IJ F}E]ϣI` 2aՂ ŦTdm[w{2)|:w^YSS쇢GYE^JdJGxJkr:B=n<a=FaA 'VԈ4 SSy,7@}Q&#g9 xx{6:V^8Hį8q cv,l-&#Hì!< TЉl GQFʓBq63CB h12|$(/!C FHn&7)ށt0  #C;N3| 嗔7#+z`&BgpX@Z<>b$ a~KtQTVB18y463FGP {09ΠnqP3ϧ%X9A*K |D8QH"h>5S}P)#30P6"-/.I x@c aۈ_//s (:'g@r!d'9#j FA8{S(^>gRA5?-]֍m[kU 7: ~A&*֬-ُ7zu)aIMD;I΄ة h<%~܁ :F|E]R 4_ Q2}prY2^Zsѥ8q"AbIs6f/5=TP*;dO3"mk)#0%sQRbYF@@?҃.S 3d ߏd^bDZदyTh.>S;,riBs=1DTDH4<p))F (st !̓|Rp>|ݞ`b˦imC݋jUL-C^ REW.Јrl쉍$!LA*^ F4s&&)^:LM6ɄPhJv߿Or#m ʱq_XsvF}&=%*淢\~נĻgA TRMBN`0&,l+G{O;#v78 AfX'U5ۂ*P<y'S*)혋-信]FyK+R6=˯@'>;N* }+{HpTT@nV BHCZJNG1̂,zR!1C^@P$>~"5%DǗ@s $~^D .F{-4G6cNO,ɢL4~ŷ%˜;BɁ0:Uoە1$: ,dIi\:}1o[t;. zT$8W]E5(<o8"%JxzX|<iI(%fzb@'Ҳ{ҪO*ߟ C1!˵J'w)5hPwX&Mbmލv,˵_ #ZE`Є'r_Q?u@$Wo٭LᄙQZҫdPyWd**PT.&"Чn5>4ԿhDiPse{E4|[8&msGO[| A~s1sxT9JD<*~1olךG 6#G K6xl\քNF(I 9j<Ο=c>Ry7j @:Ŷ =yRɔ@ojD[{b?!9 _p1_CQ*`&آ@AI|a/$Fwڟ蛌jyH:=dLJ0(UVaXw\&PW#v:}yVUy#΋&*1Äc`(h n⥠5[UVC >cΟ7/+:hfkt&` HSj m+|6"r1 ~,D<#"7 ޻S[L&'@r9DF)`A;PN_e2*~ьJ i]aL'A,@i:Eƴ]1` >y_ 2pb٣}n m!.T0oD7ؚ{wn 0: ~!< +j>_(Nl G9X|?{fTh Hm T`@:9g-|xOMJSUӓQ[@qh7uZ4q#EM;Jȣ3n5UUC4cZXt`(a-܂}Wmb&UkdrHu%Nk2q)*bRz7лUᔚ(c2UX}p@ŌUEJȖ䒇 i@i^] ;޸&~c .M5AWa}"A$黕=2m?Zpjt p۹EJpVB(00t1/Y'kk' %+ t^=-D~Meʵeq"n\  >VM9qhT`qBws}{poطFwYg9q i:LIU+c.s೬ldz32jjTs}6#B(~a3+  &L$0y,sX&ho_dIEQt%!0'2a͙r%Mr06V.wJk/:!>O JϗzU5T˂;`{cm>y7ؽ^Y)b6_զRѿٜcmBQ"xM;$ PR}ZsQ~`!KV[^66 e's*X&s8jl!n Np'Uy,;p UD*9P\'@z;v+vqjP`n?Hk3̜!, $~) rr_xA#ͻ"ɻ#?sy (rsl5]3:V?__^Q0N38XXpUۿmKqWWq0 ~ 02Jlj{o՛SM-gp \X CǮsy \RD  `#"4BW6_r.@iFTN}5[~z^O~N<)X䌏`X{/ZE_.֭;6z$4SlJYeCɻ"PՔ~+SD@j+a~m>&mxUl&  >8!A2f08uU-gHPJ{?`A%xGIKe]HdYRTplr) J5LB0 z:=_^S% CZDѩUܖOLc.i 0?$زuUuĢA9c㝝WޡPq>V ?K pf )L)AB_52t{|U+;IElM!% 1$$d1/m$?<. iNp` z{~ .K٦0=q`>9 % b㢯 /^dEU|ܔ+FœCYJ+xa%UL yl]S 2a.3檫p2AҘcooXugou: þ?W ķ$mIy?O+T-XS苫_{ױdc10fpDy~L: '?o=;~E\ 0@d+;s`ľx%5f$/_/ckDdHrk?޼zz|zxhXJ"!o* OP9hQ>/A{  օ2p2MQ钰*3Ng|C.=?X|0֣9o%_K (|gxSvĦ-y$ڶ%mE{7 ()@@ʬ)GUv,XoG|șrEv__C{wjׯGb (M@4*YD~x0߂~aV=J !Ӄi:pʧ6n`͠J/uœT`*_&አ%'u칷~riýݿ+bֵuvj$VDs!H]=ɾ~g6 " @JA l|كHډ;qئ6v]Hr+=LXAF"0q>D=;nݾ'˥u \q|ߪ?۸{hY -Zԉ.^7-P@ ؙ=: QdD:6C莺wt_Pmn+RqĶ8S`Ȃ9(^P0lOLJ0 挂K,}e}ULN=ٹvS5 (d2z"5zLs`e2gaN05D [djP8h8~v/>8XܟU@Qs! L0_~'AlsH9c; JlEU6۱*J8vbktcuv!MW$sӑHd,ElCc( +՚tMe.ǧH'AiLa)8v2'9V%%xV  $C9u]!*SjǓT22E[  V|0΁q".aB/(M|"xI ym{NI1\{(_ziLA9IENDB`mountctl/usr/local/share/Icons/poweroff3.png0000644000175000017500000002206212574030111020767 0ustar thomasthomasPNG  IHDR>asBIT|dtEXtSoftwarewww.inkscape.org< IDATxyUŹ{C7t 8#AQQD &Qēk4ф$NCsc *# " @quXSZwЬZ5|5_UBJ̎.c K6,؃ Bq8!nB uB I쫔Xkx1I 㤉c쫛\};4M=^imҔR./N݄/U@\-US0;_cLGm_B111+."_# `Q!Dpٓ%G E$U:R+#V>RqAepajV붍@M#{'!L@ :U=;=jLVf 8)%nږ_OmX#Inv-6{UkuxqRBf:/7R\, Bd֌} touT0TuuL6"WޤB!i|mBvt)Mi 0 N_Rx#d߉iJgXMaa~`4gGXU.G{: ;6fnJtw\x%ب| r'I}TX\n^ JСKlP(`3\ Ok;X'槇Uq !{SrjH\Q0=Iʓm:"j Oۘiқ./ʝX_A5έW*ar0̯R|%vB5,d2c&Iʗ$cFbvfre{',︴aM"}H;TTaaQqǹj@9 @xIL:fg;)B d4[&?S]\zBQY5 k6&+f?'ցzzkXHb{m0P . hhj}CrTsݍl}'NdĠA|)/fEH9ǰ*鬔z,p-'dN9F:.֮#` 0 tw%\̮̻氳ϦߠAnex?留3iN 贌V(tb=J^/\9'zZ'!qE6l]m׳p,ΚEsg'J&l81 /sс4ƌa3f$  `P.4C@9/Y͸TւE]Uw#h>puL/cXèO㇋Q9 yWsPlN9#1u*ߟ?K).z4 |B̐ON*͠d}plOIGBjXRh>4 ˗z=ws8~<=KV_b^KeIvpr)ws@˩r-/Ŧ&6<= :Uwh0cUw#XaVC9J fPnС|k,2V}&LgPЫaanogke>"ߟ{/ .-@yP'^o>) nI?IĉVC xu O<ƍesi1 z|[ԥ H ȑQj=MJ%7_ׯW_e'Sli)+k>80JzT`w3~r)u[oM.'`ӴiKC@.'SH߀Ù|m鬶QoP#qK]t.KEj3ATw4{.2O߱&Ь謦[4F x7SHʕl8,dWW"{C h6 YJM!']=+؛A~ J"I}DFtlid͑婦A$Lc}w<?D0t)lӍ7_6],Lʚr '.( e[`̹ҷm=hS=jЎɥqr96L:mVN/ `p%rˀvKGJ\sM`ҧ 7"Ŕn&{l{Ty~衔ƍ;uE2X2ѯT:6<0ot._N9R,d1$l7ǩ0Kؒ:Y$ցVjjRB)*| Q眓*}~T!@wI#ރn{ݳlF9䬳lѓMs v0.Hi})l#Hâ~.Q)O5zh=J%s[Sذv=}Fhʐ'A kJH tR 8 RIJ-X@ӦS}m (PMaI$~}l0iw\.6ORyT=wJX,6^̄&ۚى`JoKb.y2$I,n{O-[Clz9QjOW;ǎeJI)R~4A *_sKk4_ ==E25ɦkaqcZ+1JAW Pf^avsȪuaO /LIWtxu!%Ɗ}[@Ve;8L ) cc6r%e`w%Pk 񬯭KX+ITK"%,l!$j!"\7{gHJ{!@Jf' HԷ_?}4##HkB$}vAjhİ$BPz<. AQ@&݌Ւɰ{_ϏB}g(!rT57~≉86-BX+[.kk{5Aiњh^*Zn)wn[K5ք Sssܗ1M…ӈd8OyX7F|$EFOĢ3v܏('Ys_U$h-=) gƤ|!}ATC\~!-o3}=Ѝ>M_F!24VC[w!Sj*?`RLwo#*RQ,_Ơ4k<0IFTg/lW<50pąT@{3&#zv? I|R׏c:Ut $}7:F lnzu\L* 3g† -M N򇵖$?AT>yJ]N6IӳxSLk|rדu(PD 2A/i2}F u{6{_[VMܧ@%JVP_]4!kVƌa̙,aK lLp6Y j.'P'Ɗ'@[V ig>{}4|.!gWo:c LU s_ۓgQ~:e;}_9} l'3tgL(X^V'o2|;d/aŠ!L;}nѿ_9tJvp$<9l3Ms Efq0%dž!!_2Xdf|ʑƧ*;ݎ!m]q_<Ф eHX)u9SSԙ3{Ema,eUW^FXT@S>=c[~\PE8Q97QO(hwh^y\"哎g?R~[jc@|,فJHuOZs.تr8nH$7mdq w2+~MlAW ǀ2P8jҾ.—DDmW?*WKYGѡZwо~o ^u?AM ETB知ҵWo a an[B=*VdmeD.B{!nTo׳Q N " a'%_yW_"0L9G Rزg-OqZ-kLR2JWb$J<&up?`hC?X[lHR7he;ڃ#S_'eD{KhuΡk;P6[@J*HpW;mQsjx?c{'+ (28e N\toIFQ{Xj:̠44 דih ӿQۗƍׯ~u] )mn[tHNN~0*+xt= @X4#@:nuL!8^xp U4rε# D32] wkqK\5=<@VpCxѾ$ZQMF$"Lx,2~N8 @gY' vR㘟[mW(c.F?{9;d4 ,`% AnE븪z>AdXgG03n/Pt?:)q 0ĊzwJgIDAT`w'SåW;- R KG}Ux~*i{zC1 $B gTQi_{QKG2Y=Zk:0ǭqS ?2A\1T0 aA@ 1:d&?b㰯^m^ ?g`LFPWW ,rεؐ/ d R7xC[+>kVXi=#pvaO9AOXψ dܮ o@ {R!RA^oPSՓ7u; 2a >ǸM6Gf4ŕ,If%3gW#Q&ʏ4Ӏ C3~;8$R,;qh̤Өnj00A,ᕩb=LI]>FٛQ qܥgZ u}Rr8d?J1xoced̊,p_p_0MBgq5#OUJjt4^9v@Svuʙ!^f딒ye]("L>H@F Di"@6V2x4J{@hzlY .// hl#Hdr7'M~#0qze|ipD1`4I ۓA|=M[X4x; G?)_\0Ϲ_uZߜzIENDB`mountctl/usr/local/share/Icons/poweroff2.png0000644000175000017500000003344112574030105020774 0ustar thomasthomasPNG  IHDR>a pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F,LIDATxy$Uy3w208=B$D7@#.Q_GB47}cDMY7FE}`f2}:NuW׭o@snZg=9%1Xxy ,p`\!b'bk`}15|`1iFAVD]aӶXkhSp)6 [4#ZzFs;TkO:Oh=h$l DDϷIPIZIL3\( R#of,j!@ojwy2hc@Z8b3b]MTX \S*7Ifss9d0s-aSyqU_u-E? WB\w?9f̐%Bޒ@W#A|m)<(c:FcODLQϷWL"@_؏_0r_ w*5W6I($ :ȝQՙ\hs/ Oҟ! b\*5p"Cy:FCpRS0 K7+|#k3Jgsڛ$>zSB*?$1XCqZA$aʵSDg={wH9O{1kOP/Jj씺xpD y1/:|8BHD:dN* BA MTo%H S~>,*l0,zf]'heK_f'q?1aN`j'hPWKz2wlg}AsmE.0 ܂թTUul7,YX'1tP;KO|nBp? $(DMA=UZ7)'}Gq-'"uI7y^iYᙅ~ěj WmAܾ~>y=z䓆>_1 ºR[ BK+Bt==]2ƮU'4Zf`7< Cw A I1b]w >Ӿ.lq-JJm9EL\}I-?VXޯSĞÑAjO&D{מsY e S."C%sIZw.VHW@Ҿ;a ފQ&t7~+ly)''k( +8huUhTQSCT =wR_@8j|K~dݿ‚R70RY[R϶5aL,ҜϘ;x” AtZP!@vv_hIMMQD2Z7u(?圌_F(S.`Q 6!MD `t!q;Hut-EfscsUNMNN O JAF}6>4hD%. ea {4>헟G׀:X;)Z6BfZ=+H/_jkCk1h߇5{(3v}H) TyoD|Q/D!xnejxh/cm lʹ̪536_(MB6dk;~ҩb٧1L<hKӯHj(Vԫ0iо_l92t|OkZ8ǝHvF<ۏ^,kzu f]g1ཌy+a &,diD"HQ=?:vH '1!j^k//x KO|9 mA7zelˣaݱ3Cs{Du&A$9 uP%Z4+b ͚bP i7#Xsڙh/M f=䘳p]X 3GWLY"P2j&BUԮjϒLeNě@ ⌳i=z3V(fc!a$?8B0$ adS S6',i$%) RݳrkEP=m(ןQ4- T-kCKNdժ5~al4<+W Ҋ"սT Rsh&@L=x~wo5 U] +6 g=8[=0r]$dFPr''`J$wᤖvA@4pc|fŃrkɼLON3 Mxbf~}i=z3kDM@D4L=p G3X[ܥ>+@.v۷}Cgb<%âI`0܆Ch͵5QVja<[n"k碁 U\ br7;gMOΝ8덜b%}h\U <駞]Y6!  FK {PvJu|}N>vꄗq̇?ƽ_C"8 u#65C?*>iZrkďdhIs֝u6 frZ$":033䇆@oB!Kkrr-9ZZ[IKS{PśerT&K5v&''÷enھM{}ѻﲉ2 T4 &@8-XB57#eLYoZZXI]wo6Cg&"~|6|2_jܖV*H \zaNڷ236@U,ZԡF hѲ;2;3WC! hE/BF1SRh ڐxz-B!-91sg~xŧ#6cNFZѶ Id,ZM1/w6zhV;$ӻv)ibg=j$ ߌtoQñ}݃#_=]k+OU rA)f6o݋75o( Nw0Av?/fXyڟ1߿prCX`KO"C~h!_&'Ls&}DGN?} %Z6_egAahV!JD )ߔ1x%G f9vtk_ZҲ@ DbN?pVfjrrGpLN^ws>OJCA6PXC*\>`Q缕D_=į/MR;p<k{'=^ IzыkPHH^xhz:U23=æ3>S`eTh`M@Rm7ә !pww]FV 7:'y kC Wʶ1=ֿ~~x͹l.^~ m( fEtkVvXU ׯ[\tQE<=[*_s/:fQ ϝwwdj=ztYsLNa`I ,.x344TKqMlNVIh,, "d"My3H8QM- SC6V=\Y9`EJ?i@RmEw0ư/g`bn 6 /$K mوOQ8ȹE8æ?Co[$deg;PK٪f tk+ˏ8'M*ز[ Au4iׄk'{IY"AFR9\`4="`[FrRr7t<)QJd0ɟgu\L]>alJSJKrкv-yǩ_P$I`INy<WwM{zr gYr1h!櫮"`FL\cd/ë `IDЫW+idj9!z>'o~h|+i%G1 k D@y\@#/:Р&Fϧw&i |*1֯_V+=|k) -%7SNfhh0Q=?ֺbE0f FZMĉuJe̲k֔J=z#</"Hp<ʫ0ώv6/Y޹OiՅ(=Z556 uF&p:;)?oimaOHYq"gD5CM,8l uL,rp8jfdG\ϥmJ۶%?BZrAe !m,dI[[;{|B❘sT;fw#um$Q(rR -Ҿr圙;]d:~qb~sq7 . \Y˘-t;<>@TәRbT} fAIY!¢A 0M M04LP/@8mmt&`ICe L@ DQ *& N тˢ*Q=T*'5 iVw @gg\mT8fH|]()#TapP~Vt,AIerj)%*N xٔ<@$ '͕S*ݱ-ұr%Q9TUr<@x^Q˨DR"~@2Ag9x1Iq` 8v]["(3QiKJLNN}śJT{D:c"!XH+W ^rtފs:+$h0 (1xruR2ԞsQ"Q (%K"s%QIY) 6{J`.t6Xo/]R"@,y{ ڈ˒DWB0};훟WQ7WKRfɦaYZ8&ɣi+L@Ԏ*$F4Tr Qʍ18$f@jdtR^^ P 10$ ΠZ[Tm;)3| UX!DE%QJ!M86Q#c˄El`/u 6Synp~Ip:wek$y}G9>rm<vF́Lh!Jb\J97J8ѢhiAұ Cs:kRyR}Sj^'P5:T/>LO+Jj)pEVUh)dS T9 Lp8l״of0V8J(Ǯ;r<HzBIP/(2AhJN*V&t*ab~~+ O<~ (>?mV=R ˥tXCgy0fؼ_Oan2JDXĕNT&!QѨ"a .pg?C–\q<tC!`oS5;UK  ֬[[= C;ݻwW|$5Ĥ߱c. kfIw7]]KZBg:EGg]wt{9G1r=%@JSĞoYSXWo^s'WK9)vr }}UO~Za fl&BCMѻ∩i%&K"utF̬|?r mc #7Mǝ@(ycWiGC%?=UIrV%Gñ v-/V'KZƝJgqRkZʊڇzJJYf~T!1+d;cldxL܎)u:o|zt({>-%z|nc(q"=)!J Ad&Ctw\E1A] vձ2HĮ]lTN,-".eX`*A]w1+Z4##"8Y6!b|( %ޡ%RCw7]w~R%A'ůR" kWe4@EV #%[ߦ0>:pL $`N MPK#j‚Hah|c(jMȣxᕗwSlX@m4c't:N0IJ2*r@JЅMTC>@t3c )cHɮ-oy3ӎ୩h2R͛058|LhF:W&:t*}cpa[![\a_#f/ᑯGJIR 4@$3,WƐ|il0vcfEWWy+'/RJ.xNjg u" I֭<_$* t+8tNi'1$'%? -gg歖77 7.H[mSJ@7ƔB̆ l<|:LJ:U)c5qF`di|ӢMcN`3zNCNbN|NMXA*G9f?zKTk+ez^zN{=KO: O2%~o ω Y&i)Iha}-?>C{,H X(/Yb&&>&~|o/޽䇆"eHwv[| h۴)0vU|=uWҕNӪm0e pʙ=nNZTruZdbh'8+y"m8 "к8O|))AHrBwB>j. 84mmJ4@4ܨ%*BBJeU,~`C-/|;u6\tc zBy-ɢF:Ub^siUTh2R"}ټ0P|%Ej'DZ)zcTK }Cs綾bi6nk:׬!MʕZZvu1ߏf''fr`gaxv&vQȅ`gB>ު{'2Jy?'Tc.&@[`6P71ZYZS6ٽ};}ZB{x~@RBQ2eANΛszzNlz ~RjMiiËgQ&I }cز-O)Jk%QƑ"2QYPSKn%~lѫ bz7j ~J k3 ѻQXP-)ߙ:4UE".ALgI ;A1@ߥz d5^Y3մ 6Rm~dzto15CEdZ>:?j| #D ܅>l3ҞpL #qC/AU_ 0ߛ!Rsq1eTd3kEgɾB=6zg~ژg(>cn߿CaBl0hjg( 5o3MNDr c0;l[4TM ;BP˼+0 XQjޫrv&`Fc^m~!@]dO=*+ގٳb[O%wh]|y1`ʒΧ41f{~_oA`:vTaN$ y_^ 3LJ2 m9`-1h> WywF ( $"٥0)|qi?_Nc6R'$؟O^Kv20d&LOpu'|fI[gt:"x-Xw$':W$c,M5p‘4_ؙE[1VQ_-Z΃8sf^\ 'u&R=pz[ۋ$@a%%F̓[}Ȯ'_# e5A{ZJWN뤞T=%p5}i@Qcl)ms.lw \mVج"ū-.O}Eyۜ߉ŎQոo}5ڃ);(+&}>1kz:f @;%<.u8]ڂ.Ң.^ Dg:$D2Peƒ L.o'1\\2-'{S>wE^80f3OC( ZVhǭFu\M0X7߅ E"}=\*'j]xb"fz!j]gcf{<1cZn0ޏ| b }6XYglKK^L؝[ҝj~ƶ0W7QMFZ!cש4Lm%ۍH/jt{E6!|0'ǚ}EFM%ݎh=K8N/z9)&s kG,N IENDB`mountctl/usr/local/share/Icons/suspend.png0000644000175000017500000004204212615161234020545 0ustar thomasthomasPNG  IHDR>a pHYsIIE IDATx}eEӹ{rIL$A@@TPeWp P # J03899p;Uu_ׯg`SVԩpyݽ.%^^A_ ?󕈗Z߇ ~'> kE&9φOKRWW "@J"`L$G> @ZP^o?HUغUX o8VN9Үx$>M s%>ah Jր [7KsH烟kYUFBTb2̞ mXwa)3{];2L(wsrM!ÿH_~Tc`k0:#'Iq Fx%%0*g'UU"`愒5wKfjX.έ HOP`IR_ ; ظEeD_:Y$j#NՅ/|pFSḤkLg+aȮ胕]xbERvvg8=|npP@ \=MM"059KQ#Lݖˏ.&s>9~jҕdR4W'[ 2;KIto8kgK`!(%{١Wͽ m؍]ydt6Vax \(\ +^I cd+rR&q3蔫hBa΂(m~ E S`8]b9u8zQߤJ.$1o<9%Kܜ+rO/._~?!շ" ^.eoIcg@ܨg[TJ~Z8ah5˺ e4϶p]Z[,.Lq2o%a\Pi G=ג䢸nD [&?]*oq0&RtᇤK`u{b?JSh\Yzѧt 㳣/#߳dM9 t½ ɮRvEeBugRCGqZ(P`aΘU&Օy_C/9ѼpS3\g̺bI\py{6t怅4[xwǺx K|rv] -Fbyl3\'J0jE" ts~ߔF/hƹt~\G {wJfndpfBk_ZM6%n((y,[<ޒ֮0GW{)#‰sck!/\b#/Msgy'NαM K TR꼾Jt:XpO蘮zq$r:CȬ~pZսOz<6/̽eBD5KH4Dǵ]sS0z?*KֶUܳ6#2(Wxbt7ßD5Ǖ;Kӕ$3$6!Nd~G z3.4ES/i6@5P@^gh.ג8'ӕofeeUx,NC쬿҅WH'^:@sw/ 4F~~9fiCzD~Tǔd*G_b%* tǍs)f)9ֆfL%M#P LLZ/kySi|eILns/h]sxNÐٴ7=}SKr2W d{ +*@ƔȞNw2~O%=;X*9Ǫ)=f#>d$h^^&gQZ SZ{?]xf~~;#׌ qu);3f(<+.$؈gI7!ZI) "r25Ժ`֏a/Ӯ5~RYe0ΥV'eiy}Yws "zX91KZO{j@i3KetUB,6#W4P yHFub4A6;->DZny`n{WLoۻr.9'+(忖gwdmMs;3ϠE ozl+[NnĬ8N8;Y(葂r |qݧ˴1%'_.KRx{'|%:/_C7&SdƬc ;Q6S–1 J6^iz>9&"wbX+(K.̇?m}PV3&עm .G;[Vy Y  ,Ce= p>(xT>\yM3:"bbYj5byhE+L_|73qCyd~QG܈z2dv'L! 2m)ȱΓhsi̧!+$ѺX߮KBC^еR&4p9Xee6*cdhe/>yxO|7(_z:TFyu K.`W7?7ibŜ4bC3Q? ۽^K{;3|Dw^w )ٳϑૢ U]jQR˯9^ O%hÉ iY5+pT! `ݱ~d@oGDnGJP :9RYm^ |]#N՗*<8X+N^+v?+|~ܳB8AGq8ar{@x2""T&J|3L*fTWcM_`wǺ>V9 `RiO.LW݂Q 'n|&{[{.N0tq0/Vun|ϭ7A`efL>g{c=Z-o&#͡ y?W|Zf} ]\ MFҳi6ʠ g]֒SzoDղ2Y>[U\ Ԍ4׭E< #I{t4"m+TE-4!Qn1o { YGf3P icu6q^ *ͺy]H^W 40%]|â} 3 F3+ҌCJ'm.M~UYi.ލki*9`Y Jڋ J{7qo6MYf,O8sDY*Z$tH)hȦwMH--OQ|˘#*|8ra >b EV2+U/~ib73 I1i>ͼW얍8KZ?rU* &mF|iv9pϖ7J@AgԤ]蔁bI|./\Jα(8h#1 vl>,|];cڤ49Pv<lʈ4[ppzmwnXOen@QC1}isU|k$ktq?)vXA]^;_ j;A-`!Z F5R&C38gmZf!:u9z 8MΑ)pMWYOD׆"ʃ 1@LNm(4XS)+5٦5DՐ NJc |8AYG B@NfϾͼ'nTxf =ct\ڶ q|\Nfy)\KcWQQ<_OˉlWVg\O?gֿ#e} [e:h(C7Y+K3y,g|4n}|4uD#S(#7 hzWRhqf?D5r48+V>[vP <ُϲ?݈~Cl4]a ؑBhU}2܌~Kup/6ӛU\9Js_!`uPZι8B6xwALjȌ\YQ @ywOF* ̸ lڙ'+#(e c46G^N̝7U{X9 'ysƱ, ̰B?Ȅ:F>'K'VBPydiLj,kb,%%*kLUDtFfF'jAs櫐4#4` Js~<(r̋Fas G7w9Hkfи|ܴ59)JJѤx@Bgߜ/d\[,P)LɗǽDJq!giP~[|ص eSxT7o5e೴) ]1N捉J~QN3 X[7oZoͼKCnⶹ1z%; |6;D;_ 4ܑFhD9ɭ6hPj4˂  Bɹ]V4(vN;YeK2cY jA`m] -hH]$n ߠ~f]{dv)f;d ((ăQ8e.3o!*n0Y!V< <%A>st 4ެղiG!}[cģ]AnuǤxbS H2 `ͧ f>'jYkbO Qo0D%]T%g蓪ؔ(~/<\B I46|9|4,6@Ap?8㖦yGi?q >ǧA@KY "QZ,K>0P4._Vmx(u@PZEpU 4jQZnX!(oT2dN9HX=vT4 dWF9qx!?̩DO@4F q5?6NhAҸM3bs (K밹bY2`5mzr: {QH#,Rٴi7tr`h#ŸuI*AHk;BmL5!A6 4|7Ykvg̨:LyF 2-OJbRo+uN ,_c|gu=B!?;N >;dH t|/?mH+J8x"ރ/g[CW%^vQn/ ڿ6σ5xwqL7 ( mx<\Urݨ\z|Tŋo??CuZF\f?}M#[ƨJxZyٲ$ⲵGsٓ8 P`-KoObAX7^:`-ɥs|ǃN?#j yq=e\X^#uSJYUx_59W¶5 V h;a;7h7z&o3-VSb;:RM >f׽l[;NC݆Os\#Co$5Eya(+˭'O~myN7΃c[pfO7L)4HUUG\'G_gZlYP &O"Fd˺c^y+xCq\z`ß5,>iGUKQ1̽S͊FV,C{Q}:B}r?&ϯ9oi;6兺y(ΨlUl4XC7vNRW'cқ_. mQb?tsnqvYڟIC,ϳ\.z9vf%P`W6 q`;o 7,dzC pw}; 9 +?] {N(#%6$dFS Z☏Ǡ{c[F eGfahKaѓVeXWY%6 ~M[:z <^}'y]? ϧY__(m.9rւP-.cƒ 6mizavʕ}/@[O=Or`g˱-1rb{1`.J+(F8h3Q96 fy*/ GQӔ4mJʞ$~$> ]SME>!mLįnN1-"3kk#l;,MIh73[7-ZW ee2VjqٹVp}//q%Hmed&-ADuy9ن__ښA6#Lg2 404ٺ- mp{.Uv ھ0u1̉eϖ7w͝oxBh{9< $Njqi/|>=}YkGy8%C]8I3tqDIXpJ (Jtv FyUscOx:e.hJ89q{n]}yôg5u>%bQ=?+Ӿϖ1ӎNWo0}~֕ c(uCq,h;:҉7ΫҠ7x37'D_Z|'DWW|kv0-a϶ʛ_29¦=QK^}8ߗW~n>ڽ 6._ܖ7n,;k~TWf d`"P@4BR dyȫBb`ʒQv2_m9Vo3Ng1ҕ7W&/T^n^7[Ot+!_{z/gM}) ]*p8뉵} JeRcggMcCztc#~P|keΖxwk~>N|8|  !Gtxu~Ń3'NMd2 B ///xmmml`#f~1nWXkM@ܦ=s!exթu*eW޶%J Sy=)?kŮyo5dH !BN)|hii Duuuv!OE2hf~6ƏiT|ʔ)#]Ġ146d?Sq4>E't tX6˺JjqO~X܇=wtϫTϺjg~=N!t<~CӔq)18 *Gyr0GaB~7ZHkg8]`g!-֭[uʠ5x)AJ:'UMh75C;c0'1z*sxZI-E` .$ :s!S|lԨQ)t&-_y8sޔ-WZ/Ki|֞ e,r)AILv|ZZOA<[=lZ],uS&… E 2WBF$gSN)!􌃞ڀ.T V ^08#i>@QƨBâUR(;G`57l|qjɍS-o=QN[V' fPEa HIcy 6n(2)[nHwǠ<]zE|lז(.xZϟ JA~ v}@&#^CK٧igjJ@O"8kZ v c\9E{#S 4 3 ؁M~t&@W%r@9yi]T[qs]! E- sc3P BRhA1J+Z3w%lU&یuR;-۸"ʻ!{F\C#]ӐNw<!&_-!v JS: T8@CUX]h 6̑ThEA:97-D4hhRP҆;&6kdRuTU:s=,^Q T*ܝ,͗۟[ExL\0:}`2WmAxGEE٦-c46O0a$ndž9w`q| g4rTRT\;vyz8fҩEFޏS %`\h@@-h5qtȹ2S mIDAT3LJG&F@9.55]u3TZ ,d8OX `^++)SQQrTy@ރJ@BkdsL3~.e R`8 t >Ѩw+. ?qK9M @3\W**. uDJ@%q @It;I>U !0<gH^mOPho 8*zd}ng92\?.Ay'Ttv4ޟ`boIV+ADxÇBP|@e:IT*:BU9aU8T:ë8Ep UQZ0h5trzj>4nU Q pӤ;%5">ht4f? 6{(wi*=zX#\N:l2T HwM!0 p0zzQp !q:Q!h踂8`AV @:)q4Je`H>t!dJ .Ae=lG#Ȍ#B@M*Tht5 ps:d<ܹ?ldO"!yy94g-aZVu- Ak!IsqZ ^ K'H BiS |I#/CĐ%G=<B(yF3I˫uQ9td3$ƅӦM 6G?YaNr&<7 m`ќRCZ nرcG`9%a%P%qiT1Nf VaL(2 ]82 :'s:o߾7B7ї?9y،$+#"gƆ$IENDB`mountctl/usr/local/share/Icons/reboot.png0000644000175000017500000001402613405673150020362 0ustar thomasthomasPNG  IHDR>abKGD pHYsIIEtIME  4uezIDATx{U?UJfHB&@ 0ᄇE* {:@x{V jpVrE#/ѨpE0*"l'0!7L2;~Twv]U{Nꮺ}i Lz$^O.~];x5j'Q@1 Xu~RLP/%`( C&``7 ^ɞx?`.p8ٯ3 0>(kSw _V \ |Z8qOt‹%A끧_oV#-`4``qW;Q*^#&< I*@ӀL1W;A`bA_N`UeG-`> 0rqZ}<j_4>{cF}utߧFPKhn4}?U|&n?V;=Bˀۧ5rԄ{ _R:*_j dt(wN#ՈӘ\4^-Z 2j`_9VxS>ؽOuLSm}x`(u^%Ni40QyX="ǁv@4,6nYC_:Z;Yπϴv!yߢ8 x{ qI:!eRvأtntcӸa-n`CbDb3pΉ& D=ѰXMm夈 RY8:-0&ۀkp u@RIT~Zêv}1^ [%HoB}1m4y {NhžzZs`NkV͉ E2iq1bQ(> 0 ^S?ީR2N׹dΣFJuHY O.}ahW[2DbeŒ/PX\00k-V¤/ 0n4JO3EvV N n9]hXm/R$@ 5ժ=׋D4,^Υv+-X jŤmŸ-M?YelJ$w3W$hXD":#l,-m1-cx20  gKBß_^0>Blع w{h aĹ"\x87R Eqwoʛaػ|bohp'Y,~E\5u/"ifSHP&.qVx1zw>#3=YaY*UE,;[5{4&=gqF~8r@Ϋ[q1L<ٵۑ3S2"@361خ|v$)=`Asstcce7Cd>A>KU$Lݎg}x1q9Avi  qNZAtSn3 pMحi+\Jq;532|YQ<ػ{e>ex8nXAf X}.^܈=VZVPxKfNp XDXƕk/-p漥;xKx؜0_&A nu/=#c0zCY^,Wcn^*jbKw_>/~.ۻ|{7Z}\^i844˗*.Zy{xf8Xlll@`%^|=/Əc_3Ir#Wb. 5?Va)kGa[z\n-#1P˛HyA;&`1nKD`Nc|3:hɪ"~(1 2X8lw&aaz*SO5[2fBmzo+'{֒4, ,^-IQ+~dE0^U(lR# {#:(^@x%2_)Ìߵ%Z%UobI"?փ[d]eaՠ%um`<:?qoClG#eUWg"eJ6V6!!]xKBE/%@_v14AsӰpw9~+#@<,u7( , %pXטN_Ĕ'-mZĦO:Ik2߿X85'K8Er ^%L.px[0ĜH+w nRiXN`pi4,8f(0'\W t7vs",%X W7rfaH>D4,;ҟ#UW%0WewpkaEk³c燡Qf L5Wt2\7W܂am)kU%0_SGe/xYrlt']Lʂ"}@^6 -_&ㅑʕD$OKҭe2$sI {"Ul12H*+AfRUTT&J6 Q 02#͇|I GеeJ˲H&1cXe&$Ld&L%ҥ:B*6< DM\f%3ޥRA`e%JzTwRZd~m2fŲ,s^38e%0i%lM\B2M2eHjOJ>LJ _q.e,"8Hd"0 [ SĒ/`)T Dj@20jxPÊ6^Si+e)qi:ei6,4mD#,˲?LieY#, ~ϢK/lHyz,ǀ[Q8U;ȈԐ'U]E"A>ʞj×_%LT%dM]B*F0lP2dQI :)=4%SK`LjB%ʝ^EI&tb@WY^$S?iDBgkvdRV*T ުD CqAɼad~V*1@JZ7!ͼve[\J51N:yWQuRm%rA}6R%S2 ё/4Q;6IENDB`mountctl/etc/0000770000175000017500000000000013140617325013045 5ustar thomasthomasmountctl/etc/pam.d/0000770000175000017500000000000013407416745014055 5ustar thomasthomasmountctl/etc/pam.d/common-session0000644000175000017500000000234513134674754016763 0ustar thomasthomas# # /etc/pam.d/common-session - session-related modules common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of modules that define tasks to be performed # at the start and end of sessions of *any* kind (both interactive and # non-interactive). # # As of pam 1.0.1-6, this file is managed by pam-auth-update by default. # To take advantage of this, it is recommended that you configure any # local modules either before or after the default block, and use # pam-auth-update to manage selection of other modules. See # pam-auth-update(8) for details. # here are the per-package modules (the "Primary" block) session [default=1] pam_permit.so # here's the fallback if no module succeeds session requisite pam_deny.so # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around session required pam_permit.so # and here are more per-package modules (the "Additional" block) session required pam_unix.so session optional pam_systemd.so # end of pam-auth-update config session required pam_exec.so seteuid /usr/local/bin/sessionctl mountctl/etc/pam.d/ReadMe0000644000175000017500000000026713407416745015145 0ustar thomasthomasIn die im PAM-Verzeichnis bestehende Datei common-session ist nur am Ende der Datei das folgende Statement anzufügen: session required pam_exec.so seteuid /usr/local/bin/sessionctl mountctl/etc/systemd/0000770000175000017500000000000013140617333014534 5ustar thomasthomasmountctl/etc/systemd/system/0000770000175000017500000000000013505362316016063 5ustar thomasthomasmountctl/etc/systemd/system/media-SSD.mount0000644000175000017500000000052113407445330020655 0ustar thomasthomas[Unit] Description=thlu:Mount Network-Drives Requires=serverctl.service After=serverctl.service Conflicts=shutdown.target ConditionPathExists=/media/SSD [Mount] What=//172.1.1.2/SSD Where=/media/SSD Options=username=thomas,password=meinpassword,rw,nosuid,nodev,noexec,async Type=cifs [Install] WantedBy=multi-user.target mountctl/etc/systemd/system/media-Musik@.service0000644000175000017500000000100213505215732021705 0ustar thomasthomas#mountctlgroup=sambauser [Unit] Description=thlu:Mount Network-Drives for specified user: %n Requires=serverctl.service After=serverctl.service Conflicts=shutdown.target ConditionPathExists=/media/Musik [Service] Type=simple RemainAfterExit=yes ExecStart=/bin/mount //172.1.1.2/Musik /media/Musik -t cifs -o credentials=/home/%I/.smbcredentials,vers=3.0,uid=%I,gid=%I,dir_mode=0770,file_mode=0644,rw,noauto,nosuid,nodev,noexec,nouser,async ExecStop=/bin/umount /media/Musik [Install] WantedBy=multi-user.target mountctl/etc/systemd/system/network-is-connect.service0000644000175000017500000000030313407415661023200 0ustar thomasthomas[Unit] Description=thlu:network-is-connect.service: Starts after Network is connected or before disconnected [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/true ExecStop=/bin/true mountctl/etc/systemd/system/media-Multimedia@.service0000644000175000017500000000102313505215732022712 0ustar thomasthomas#mountctlgroup=thomas [Unit] Description=thlu:Mount Network-Drives for specified user: %n Requires=serverctl.service After=serverctl.service Conflicts=shutdown.target ConditionPathExists=/media/Multimedia [Service] Type=simple RemainAfterExit=yes ExecStart=/bin/mount //172.1.1.2/Multimedia /media/Multimedia -t cifs -o credentials=/home/%I/.smbcredentials,vers=3.0,uid=%I,gid=%I,dir_mode=0770,file_mode=0644,rw,noauto,nosuid,nodev,noexec,nouser,async ExecStop=/bin/umount /media/Multimedia [Install] WantedBy=multi-user.target mountctl/etc/systemd/system/suspend-resume.service0000644000175000017500000000032113410715425022421 0ustar thomasthomas[Unit] Description=thlu:suspend-resume.service: resume network + mounts after suspend After=suspend.target [Service] Type=oneshot ExecStart=/usr/local/bin/mountctl resume [Install] WantedBy=suspend.target mountctl/etc/systemd/system/serverctl.service0000644000175000017500000000056013405504715021462 0ustar thomasthomas[Unit] Description=thlu:serverctl.service: Waiting for Network or Server to be up After=network.target [Service] Type=oneshot RemainAfterExit=yes TimeoutStartSec=95 ExecStartPre=/usr/local/bin/serverctl 172.1.1.2 ExecStart=/bin/systemctl start network-is-connect.service ExecStop=/bin/systemctl stop network-is-connect.service [Install] WantedBy=multi-user.target mountctl/etc/systemd/system/media-SSD@.service0000644000175000017500000000076713505216147021270 0ustar thomasthomas#mountctlgroup=thomas [Unit] Description=thlu:Mount Network-Drives for specified user: %n Requires=serverctl.service After=serverctl.service Conflicts=shutdown.target ConditionPathExists=/media/SSD [Service] Type=simple RemainAfterExit=yes ExecStart=/bin/mount //172.1.1.2/SSD /media/SSD -t cifs -o credentials=/home/%I/.smbcredentials,vers=3.0,uid=%I,gid=%I,dir_mode=0770,file_mode=0644,rw,noauto,nosuid,nodev,noexec,nouser,async ExecStop=/bin/umount /media/SSD [Install] WantedBy=multi-user.target mountctl/etc/systemd/system/media-Foto@.service0000644000175000017500000000077613505215732021545 0ustar thomasthomas#mountctlgroup=sambauser [Unit] Description=thlu:Mount Network-Drives for specified user: %n Requires=serverctl.service After=serverctl.service Conflicts=shutdown.target ConditionPathExists=/media/Foto [Service] Type=simple RemainAfterExit=yes ExecStart=/bin/mount //172.1.1.2/Foto /media/Foto -t cifs -o credentials=/home/%I/.smbcredentials,vers=3.0,uid=%I,gid=%I,dir_mode=0770,file_mode=0644,rw,noauto,nosuid,nodev,noexec,nouser,async ExecStop=/bin/umount /media/Foto [Install] WantedBy=multi-user.target mountctl/etc/systemd/system/SHome@.service0000644000175000017500000000101613505216223020554 0ustar thomasthomas#mountctlgroup=sambauser [Unit] Description=thlu:Mount Network-Drives for specified user: %n Requires=serverctl.service After=serverctl.service Conflicts=shutdown.target ConditionPathExists=/home/%I/SHome [Service] Type=simple RemainAfterExit=yes ExecStart=/bin/mount //172.1.1.2/homes/SHome /home/%I/SHome -t cifs -o credentials=/home/%I/.smbcredentials,vers=3.0,uid=%I,gid=%I,dir_mode=0770,file_mode=0644,rw,noauto,nosuid,nodev,noexec,nouser,async ExecStop=/bin/umount /home/%I/SHome [Install] WantedBy=multi-user.target mountctl/etc/systemd/system/media-Buch@.service0000644000175000017500000000077613505215504021514 0ustar thomasthomas#mountctlgroup=sambauser [Unit] Description=thlu:Mount Network-Drives for specified user: %n Requires=serverctl.service After=serverctl.service Conflicts=shutdown.target ConditionPathExists=/media/Buch [Service] Type=simple RemainAfterExit=yes ExecStart=/bin/mount //172.1.1.2/Buch /media/Buch -t cifs -o credentials=/home/%I/.smbcredentials,vers=3.0,uid=%I,gid=%I,dir_mode=0770,file_mode=0644,rw,noauto,nosuid,nodev,noexec,nouser,async ExecStop=/bin/umount /media/Buch [Install] WantedBy=multi-user.target mountctl/etc/systemd/system/media-Film@.service0000644000175000017500000000077613505215732021525 0ustar thomasthomas#mountctlgroup=sambauser [Unit] Description=thlu:Mount Network-Drives for specified user: %n Requires=serverctl.service After=serverctl.service Conflicts=shutdown.target ConditionPathExists=/media/Film [Service] Type=simple RemainAfterExit=yes ExecStart=/bin/mount //172.1.1.2/Film /media/Film -t cifs -o credentials=/home/%I/.smbcredentials,vers=3.0,uid=%I,gid=%I,dir_mode=0770,file_mode=0644,rw,noauto,nosuid,nodev,noexec,nouser,async ExecStop=/bin/umount /media/Film [Install] WantedBy=multi-user.target mountctl/etc/systemd/system/mountctl@.service0000644000175000017500000000055713505362316021424 0ustar thomasthomas[Unit] Description=thlu:mountctl.service: Connect + Disconnect Remote-Mounts: %n After=serverctl.service Requires=serverctl.service Conflicts=shutdown.target ConditionFileNotEmpty=/home/%I/.smbcredentials [Service] RemainAfterExit=yes Type=idle ExecStart=/usr/local/bin/mountctl start %I ExecStop=/usr/local/bin/mountctl stop [Install] WantedBy=multi-user.target mountctl/home/0000770000175000017500000000000013407417532013226 5ustar thomasthomasmountctl/home/Username/0000770000175000017500000000000013407446462015011 5ustar thomasthomasmountctl/home/Username/.bash_aliases0000644000175000017500000000045713411465216017432 0ustar thomasthomasalias mountctl="/usr/bin/pkexec /usr/local/bin/mountctl" alias poweroff="/usr/bin/pkexec /usr/local/bin/mountctl poweroff" alias suspend="/usr/bin/pkexec /usr/local/bin/mountctl suspend" alias reboot="/usr/bin/pkexec /usr/local/bin/mountctl reboot" alias selnic="/usr/bin/pkexec /usr/local/bin/selnic" mountctl/home/Username/Schreibtisch/0000770000175000017500000000000013407446426017423 5ustar thomasthomasmountctl/home/Username/Schreibtisch/mountctl_suspend_helper.desktop0000644000175000017500000000041313411510345025747 0ustar thomasthomas[Desktop Entry] Type=Application Exec=/usr/bin/pkexec /usr/local/bin/mountctl suspend Icon=/usr/local/share/Icons/suspend.png Terminal=true Categories=Utility; Name=Mountctl-Helper Comment=Helper for Umount remote-shares before lan is disconnect Name[de_DE]=Suspend mountctl/home/Username/Schreibtisch/mountctl_reboot_helper.desktop0000644000175000017500000000041013411510345025555 0ustar thomasthomas[Desktop Entry] Type=Application Exec=/usr/bin/pkexec /usr/local/bin/mountctl reboot Icon=/usr/local/share/Icons/reboot.png Terminal=true Categories=Utility; Name=Mountctl-Helper Comment=Helper for Umount remote-shares before lan is disconnect Name[de_DE]=Reboot mountctl/home/Username/Schreibtisch/mountctl_poweroff_helper.desktop0000644000175000017500000000041613411510345026120 0ustar thomasthomas[Desktop Entry] Type=Application Exec=/usr/bin/pkexec /usr/local/bin/mountctl poweroff Icon=/usr/local/share/Icons/poweroff.png Terminal=true Categories=Utility; Name=Mountctl-Helper Comment=Helper for Umount remote-shares before lan is disconnect Name[de_DE]=Poweroff