├── .gitignore ├── LICENSE.txt ├── README.md ├── captures ├── 1.png ├── 2.png └── 3.png ├── desktop └── startup-watcher.desktop ├── startupwatcher.ico ├── startupwatcher.lpi ├── startupwatcher.lpr ├── startupwatcher.lps ├── startupwatcher.png ├── startupwatcher.res ├── startupwatcher.svg ├── unit1.lfm ├── unit1.pas ├── unit2.lfm └── unit2.pas /.gitignore: -------------------------------------------------------------------------------- 1 | lib 2 | backup 3 | startupwatcher 4 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc. 5 | 675 Mass Ave, Cambridge, MA 02139, USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Library General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Startup-Watcher 2 | 3 | Watch services and startup applications on linux and notify when change occur (this is an initial version, changes will be made from time to time, any pr is more than welcome) 4 | 5 | **Features** 6 | 7 | - Watch for changes on 32 locations 8 | - Notify when change occur 9 | - Save change to /home/../.startup-watcher/changes 10 | - Start hidden on the tray 11 | - Root not required 12 | - Watch root and user 13 | - And much more. 14 | 15 | **Usage** 16 | 17 | Download the release binary then 18 | 19 | ``` 20 | ./startupwatcher 21 | ``` 22 | 23 | **Contribute** 24 | 25 | Just install `lazarus` and open the project. 26 | 27 | **Require** 28 | 29 | Bash, cat, diff 30 | 31 | **Capture** 32 | 33 | ![alt text](https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/master/captures/1.png) 34 | 35 | ![alt text](https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/master/captures/2.png) 36 | 37 | ![alt text](https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/master/captures/3.png) 38 | 39 | -------------------------------------------------------------------------------- /captures/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/captures/1.png -------------------------------------------------------------------------------- /captures/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/captures/2.png -------------------------------------------------------------------------------- /captures/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/captures/3.png -------------------------------------------------------------------------------- /desktop/startup-watcher.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Startup-Watcher 3 | Type=Application 4 | Terminal=false 5 | Exec=startupwatcher 6 | Icon=cs-startup-programs 7 | Comment=Watch changes on services and start up application 8 | Encoding=UTF-8 9 | Categories=GNOME;GTK;Network;Settings; 10 | -------------------------------------------------------------------------------- /startupwatcher.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/startupwatcher.ico -------------------------------------------------------------------------------- /startupwatcher.lpi: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | <ResourceType Value="res"/> 10 | <UseXPManifest Value="True"/> 11 | <Icon Value="0"/> 12 | </General> 13 | <i18n> 14 | <EnableI18N LFM="False"/> 15 | </i18n> 16 | <VersionInfo> 17 | <StringTable ProductVersion=""/> 18 | </VersionInfo> 19 | <BuildModes Count="1"> 20 | <Item1 Name="Default" Default="True"/> 21 | </BuildModes> 22 | <PublishOptions> 23 | <Version Value="2"/> 24 | </PublishOptions> 25 | <RunParams> 26 | <local> 27 | <FormatVersion Value="1"/> 28 | </local> 29 | </RunParams> 30 | <RequiredPackages Count="1"> 31 | <Item1> 32 | <PackageName Value="LCL"/> 33 | </Item1> 34 | </RequiredPackages> 35 | <Units Count="3"> 36 | <Unit0> 37 | <Filename Value="startupwatcher.lpr"/> 38 | <IsPartOfProject Value="True"/> 39 | <UnitName Value="startupwatcher"/> 40 | </Unit0> 41 | <Unit1> 42 | <Filename Value="unit1.pas"/> 43 | <IsPartOfProject Value="True"/> 44 | <ComponentName Value="Form1"/> 45 | <HasResources Value="True"/> 46 | <ResourceBaseClass Value="Form"/> 47 | <UnitName Value="Unit1"/> 48 | </Unit1> 49 | <Unit2> 50 | <Filename Value="unit2.pas"/> 51 | <IsPartOfProject Value="True"/> 52 | <ComponentName Value="Form2"/> 53 | <HasResources Value="True"/> 54 | <ResourceBaseClass Value="Form"/> 55 | <UnitName Value="Unit2"/> 56 | </Unit2> 57 | </Units> 58 | </ProjectOptions> 59 | <CompilerOptions> 60 | <Version Value="11"/> 61 | <Target> 62 | <Filename Value="startupwatcher"/> 63 | </Target> 64 | <SearchPaths> 65 | <IncludeFiles Value="$(ProjOutDir)"/> 66 | <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> 67 | </SearchPaths> 68 | <Linking> 69 | <Options> 70 | <Win32> 71 | <GraphicApplication Value="True"/> 72 | </Win32> 73 | </Options> 74 | </Linking> 75 | <Other> 76 | <CompilerMessages> 77 | <MsgFileName Value=""/> 78 | </CompilerMessages> 79 | <CompilerPath Value="$(CompPath)"/> 80 | </Other> 81 | </CompilerOptions> 82 | <Debugging> 83 | <Exceptions Count="3"> 84 | <Item1> 85 | <Name Value="EAbort"/> 86 | </Item1> 87 | <Item2> 88 | <Name Value="ECodetoolError"/> 89 | </Item2> 90 | <Item3> 91 | <Name Value="EFOpenError"/> 92 | </Item3> 93 | </Exceptions> 94 | </Debugging> 95 | </CONFIG> 96 | -------------------------------------------------------------------------------- /startupwatcher.lpr: -------------------------------------------------------------------------------- 1 | program startupwatcher; 2 | 3 | {$mode objfpc}{$H+} 4 | 5 | uses 6 | {$IFDEF UNIX}{$IFDEF UseCThreads} 7 | cthreads, 8 | {$ENDIF}{$ENDIF} 9 | Interfaces, // this includes the LCL widgetset 10 | Forms, Unit1, Unit2 11 | { you can add units after this }; 12 | 13 | {$R *.res} 14 | 15 | begin 16 | Application.Title:='Startup-Watcher'; 17 | RequireDerivedFormResource := True; 18 | Application.Initialize; 19 | Application.CreateForm(TForm1, Form1); 20 | Application.ShowMainForm:=false; 21 | Application.CreateForm(TForm2, Form2); 22 | Application.Run; 23 | end. 24 | 25 | -------------------------------------------------------------------------------- /startupwatcher.lps: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <CONFIG> 3 | <ProjectSession> 4 | <Version Value="9"/> 5 | <BuildModes Active="Default"/> 6 | <Units Count="5"> 7 | <Unit0> 8 | <Filename Value="startupwatcher.lpr"/> 9 | <IsPartOfProject Value="True"/> 10 | <UnitName Value="startupwatcher"/> 11 | <EditorIndex Value="2"/> 12 | <WindowIndex Value="0"/> 13 | <TopLine Value="1"/> 14 | <CursorPos X="21" Y="21"/> 15 | <UsageCount Value="118"/> 16 | <Loaded Value="True"/> 17 | </Unit0> 18 | <Unit1> 19 | <Filename Value="unit1.pas"/> 20 | <IsPartOfProject Value="True"/> 21 | <ComponentName Value="Form1"/> 22 | <HasResources Value="True"/> 23 | <ResourceBaseClass Value="Form"/> 24 | <UnitName Value="Unit1"/> 25 | <IsVisibleTab Value="True"/> 26 | <EditorIndex Value="0"/> 27 | <WindowIndex Value="0"/> 28 | <TopLine Value="589"/> 29 | <CursorPos X="29" Y="616"/> 30 | <UsageCount Value="118"/> 31 | <Loaded Value="True"/> 32 | <LoadedDesigner Value="True"/> 33 | </Unit1> 34 | <Unit2> 35 | <Filename Value="unit2.pas"/> 36 | <IsPartOfProject Value="True"/> 37 | <ComponentName Value="Form2"/> 38 | <HasResources Value="True"/> 39 | <ResourceBaseClass Value="Form"/> 40 | <UnitName Value="Unit2"/> 41 | <EditorIndex Value="1"/> 42 | <WindowIndex Value="0"/> 43 | <TopLine Value="13"/> 44 | <CursorPos X="53" Y="24"/> 45 | <UsageCount Value="73"/> 46 | <Loaded Value="True"/> 47 | <LoadedDesigner Value="True"/> 48 | </Unit2> 49 | <Unit3> 50 | <Filename Value="unit1.lfm"/> 51 | <WindowIndex Value="0"/> 52 | <TopLine Value="1"/> 53 | <CursorPos X="12" Y="11"/> 54 | <UsageCount Value="19"/> 55 | <DefaultSyntaxHighlighter Value="LFM"/> 56 | </Unit3> 57 | <Unit4> 58 | <Filename Value="/run/media/intika/Samsung.128G/xdev/startup-watcher/unit1.pas"/> 59 | <UnitName Value="Unit1"/> 60 | <WindowIndex Value="0"/> 61 | <TopLine Value="529"/> 62 | <CursorPos X="22" Y="534"/> 63 | <UsageCount Value="10"/> 64 | </Unit4> 65 | </Units> 66 | <General> 67 | <ActiveWindowIndexAtStart Value="0"/> 68 | </General> 69 | <JumpHistory Count="1" HistoryIndex="0"> 70 | <Position1> 71 | <Filename Value="unit1.pas"/> 72 | <Caret Line="98" Column="28" TopLine="93"/> 73 | </Position1> 74 | </JumpHistory> 75 | </ProjectSession> 76 | <EditorMacros Count="0"/> 77 | </CONFIG> 78 | -------------------------------------------------------------------------------- /startupwatcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/startupwatcher.png -------------------------------------------------------------------------------- /startupwatcher.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/startupwatcher.res -------------------------------------------------------------------------------- /startupwatcher.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" version="1"> 2 | <rect style="fill:#686868" width="56" height="56" x="-60" y="-60" rx="28" ry="28" transform="matrix(0,-1,-1,0,0,0)"/> 3 | <path style="opacity:0.1;fill:#ffffff" d="M 32 4 C 16.488443 4 4 16.488 4 32 C 4 32.113556 4.0112848 32.224032 4.0175781 32.335938 C 4.3691112 17.134181 16.711164 5 32 5 C 47.288835 5 59.630889 17.134181 59.982422 32.335938 C 59.988693 32.224113 60 32.113448 60 32 C 60 16.488 47.511556 4 32 4 z"/> 4 | <g style="opacity:0.2" transform="matrix(1.33256,0,0,1.33256,15.9998,17.000115)"> 5 | <g> 6 | <path d="m 24.013,0.001 c 0,0 -3.601,-0.101 -7.2,1.7 -1.1,0.5 -2.3,1.3 -3.3,2.3 -1.617,1.617 -4.129,4.594 -6.107,7 l -4.393,0 -2,3 3.392,0.917 c 0.01,0.121 0.042,0.292 0.136,0.523 L 4.014,16.6 c 0,0 -0.2,0.4 1.3,2 1.6,1.601 2.1,1.4 2.1,1.4 l 1.243,-0.564 c 0.186,0.058 0.324,0.078 0.414,0.078 l 0.943,3.486 3,-2 0,-4.527 c 2.423,-1.959 5.396,-4.421 7,-5.973 1,-1 1.8,-2.2 2.399,-3.3 1.699,-3.599 1.6,-7.199 1.6,-7.199 z m -7,9 c -1.101,0 -2,-0.9 -2,-2 0,-1.101 0.899,-2 2,-2 1.1,0 2,0.899 2,2 0,1.1 -0.901,2 -2,2 z m -10.5,12 c 0.2,0.101 0.3,0.2 0.5,0.3 -0.2,0.2 -0.4,0.5 -0.601,0.7 -2.301,2.3 -6.399,2 -6.399,2 0,0 -0.3,-4.101 2,-6.399 0.2,-0.201 0.5,-0.399 0.7,-0.601 0.1,0.2 0.199,0.3 0.3,0.5 -1.5,1.899 -1.3,4.8 -1.3,4.8 0,0 2.899,0.2 4.8,-1.3 z"/> 7 | </g> 8 | </g> 9 | <g style="fill:#ffffff" transform="matrix(1.33256,0,0,1.33256,15.9998,16)"> 10 | <g> 11 | <path d="m 24.013,0.001 c 0,0 -3.601,-0.101 -7.2,1.7 -1.1,0.5 -2.3,1.3 -3.3,2.3 -1.617,1.617 -4.129,4.594 -6.107,7 l -4.393,0 -2,3 3.392,0.917 c 0.01,0.121 0.042,0.292 0.136,0.523 L 4.014,16.6 c 0,0 -0.2,0.4 1.3,2 1.6,1.601 2.1,1.4 2.1,1.4 l 1.243,-0.564 c 0.186,0.058 0.324,0.078 0.414,0.078 l 0.943,3.486 3,-2 0,-4.527 c 2.423,-1.959 5.396,-4.421 7,-5.973 1,-1 1.8,-2.2 2.399,-3.3 1.699,-3.599 1.6,-7.199 1.6,-7.199 z m -7,9 c -1.101,0 -2,-0.9 -2,-2 0,-1.101 0.899,-2 2,-2 1.1,0 2,0.899 2,2 0,1.1 -0.901,2 -2,2 z m -10.5,12 c 0.2,0.101 0.3,0.2 0.5,0.3 -0.2,0.2 -0.4,0.5 -0.601,0.7 -2.301,2.3 -6.399,2 -6.399,2 0,0 -0.3,-4.101 2,-6.399 0.2,-0.201 0.5,-0.399 0.7,-0.601 0.1,0.2 0.199,0.3 0.3,0.5 -1.5,1.899 -1.3,4.8 -1.3,4.8 0,0 2.899,0.2 4.8,-1.3 z"/> 12 | </g> 13 | </g> 14 | <path style="opacity:0.2" d="M 59.982422,32.664062 C 59.630879,47.865819 47.289272,60 32,60 16.712037,60 4.3711461,47.867898 4.0175781,32.667969 4.0114012,32.778588 4,32.887761 4,33 4,48.512 16.488,61 32,61 47.512,61 60,48.512 60,33 c 0,-0.113448 -0.01128,-0.224113 -0.01758,-0.335938 z"/> 15 | </svg> 16 | -------------------------------------------------------------------------------- /unit1.lfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 12 3 | Height = 626 4 | Top = 53 5 | Width = 1086 6 | Caption = 'Startup Watcher' 7 | ClientHeight = 603 8 | ClientWidth = 1086 9 | Constraints.MaxHeight = 626 10 | Constraints.MaxWidth = 1190 11 | Constraints.MinHeight = 626 12 | Constraints.MinWidth = 1086 13 | Font.Name = 'Liberation Mono' 14 | Menu = MainMenu1 15 | OnActivate = FormActivate 16 | OnCloseQuery = FormCloseQuery 17 | OnCreate = FormCreate 18 | Position = poDesktopCenter 19 | LCLVersion = '1.2.4.0' 20 | object Button1: TButton 21 | Left = 1088 22 | Height = 25 23 | Top = 5 24 | Width = 97 25 | Caption = 'Refresh All' 26 | Font.Height = 11 27 | Font.Name = 'Liberation Mono' 28 | OnClick = Button1Click 29 | ParentFont = False 30 | TabOrder = 0 31 | end 32 | object TabControl1: TTabControl 33 | Left = 8 34 | Height = 592 35 | Top = 9 36 | Width = 1073 37 | OnChange = TabControl1Change 38 | TabPosition = tpLeft 39 | TabWidth = 181 40 | TabIndex = 29 41 | Tabs.Strings = ( 42 | 'Systemd-Services Root' 43 | 'Systemd-Timers x Root' 44 | 'Systemd-Init.d Root' 45 | 'Cron-Scheduler Root' 46 | 'DBus-Services Root' 47 | 'XDG-Autostart Root' 48 | 'XDG-Openbox Root' 49 | 'X11-Xinitrc Root' 50 | 'Udev-Rules Root' 51 | 'ETC-Profile.d Root' 52 | 'ETC-Profile Root' 53 | 'RC.D-RC.Local Root' 54 | 'RC.Local Root' 55 | 'Xsession-LightDM Root' 56 | 'Xsession-LXDM Root' 57 | 'Xsession-SDDM Root' 58 | 'Xsession-GDM Root' 59 | 'Systemd-Services User' 60 | 'Systemd-Timers x User' 61 | 'Cron-Scheduler User' 62 | 'XDG-Openbox User' 63 | 'X11-Xinitrc x User' 64 | 'KDE-Environment User' 65 | 'KDE-Autostart User' 66 | 'KDE-Shutdown User' 67 | 'Xsession User' 68 | 'Xprofile User' 69 | 'Autostart-sh User' 70 | 'Autostart User' 71 | 'Fluxbox-Startup x User' 72 | 'Aws-Autorun.sh x User' 73 | 'Wine x User' 74 | ) 75 | Font.Height = 12 76 | Font.Name = 'Liberation Mono' 77 | Font.Pitch = fpFixed 78 | Font.Quality = fqAntialiased 79 | ParentBiDiMode = False 80 | ParentFont = False 81 | TabOrder = 1 82 | object Label2: TLabel 83 | Left = 187 84 | Height = 14 85 | Top = 405 86 | Width = 602 87 | Caption = 'Changes since last check (removed: <, added: >, history: ~/.startup-watcher/changes/) ' 88 | ParentColor = False 89 | end 90 | object Memo1: TMemo 91 | Left = 185 92 | Height = 352 93 | Top = 47 94 | Width = 882 95 | Font.Name = 'Liberation Mono' 96 | ParentFont = False 97 | ScrollBars = ssAutoBoth 98 | TabOrder = 1 99 | end 100 | object Memo2: TMemo 101 | Left = 185 102 | Height = 160 103 | Top = 425 104 | Width = 882 105 | Font.Name = 'Liberation Mono' 106 | Font.Pitch = fpFixed 107 | Font.Quality = fqAntialiased 108 | ParentFont = False 109 | ScrollBars = ssAutoBoth 110 | TabOrder = 2 111 | end 112 | object Edit1: TEdit 113 | Left = 185 114 | Height = 22 115 | Top = 22 116 | Width = 882 117 | TabOrder = 3 118 | end 119 | object Button3: TButton 120 | Left = 863 121 | Height = 23 122 | Top = 400 123 | Width = 100 124 | Caption = 'Reload tab' 125 | OnClick = Button3Click 126 | TabOrder = 4 127 | end 128 | object Button4: TButton 129 | Left = 967 130 | Height = 23 131 | Top = 400 132 | Width = 100 133 | Caption = 'Refresh All' 134 | OnClick = Button4Click 135 | TabOrder = 5 136 | end 137 | end 138 | object Button5: TButton 139 | Left = 1088 140 | Height = 25 141 | Top = 36 142 | Width = 97 143 | Caption = 'To Tray' 144 | Font.Height = 11 145 | Font.Name = 'Liberation Mono' 146 | OnClick = Button5Click 147 | ParentFont = False 148 | TabOrder = 2 149 | end 150 | object GroupBox1: TGroupBox 151 | Left = 8 152 | Height = 25 153 | Top = 1 154 | Width = 1073 155 | ClientHeight = 21 156 | ClientWidth = 1069 157 | TabOrder = 3 158 | object Label1: TLabel 159 | Left = 399 160 | Height = 16 161 | Top = 2 162 | Width = 279 163 | Alignment = taCenter 164 | Caption = 'Startup Watcher - Startup Items' 165 | Font.Height = 15 166 | Font.Name = 'Liberation Mono' 167 | Font.Style = [fsBold] 168 | ParentColor = False 169 | ParentFont = False 170 | end 171 | end 172 | object Button6: TButton 173 | Left = 1088 174 | Height = 25 175 | Top = 68 176 | Width = 97 177 | Caption = 'Quit' 178 | Font.Height = 11 179 | Font.Name = 'Liberation Mono' 180 | OnClick = Button6Click 181 | ParentFont = False 182 | TabOrder = 4 183 | end 184 | object Memo3: TMemo 185 | Left = 1088 186 | Height = 82 187 | Top = 512 188 | Width = 97 189 | TabOrder = 5 190 | Visible = False 191 | end 192 | object TrayIcon1: TTrayIcon 193 | BalloonHint = 'Startup Watcher' 194 | BalloonTitle = 'Startup Watcher' 195 | PopUpMenu = PopupMenu1 196 | Icon.Data = { 197 | 3E42000000000100010040400000010020002842000016000000280000004000 198 | 0000800000000100200000000000004000006400000064000000000000000000 199 | 0000000000000000000000000000000000000000000000000000000000000000 200 | 0000000000000000000000000000000000000000000000000000000000000000 201 | 0000000000000000000000000000000000000000000000000000000000000000 202 | 0000000000000000000000000000000000000000000000000000000000000000 203 | 0000000000000000000000000000000000000000000000000000000000000000 204 | 0000000000000000000000000000000000000000000000000000000000000000 205 | 0000000000000000000000000000000000000000000000000000000000000000 206 | 0000000000000000000000000000000000000000000000000000000000000000 207 | 0000000000000000000000000000000000000000000000000000000000000000 208 | 0000000000000000000000000000000000000000000000000000000000000000 209 | 0000000000000000000000000000000000000000000000000000000000000000 210 | 0000000000000000000000000000000000000000000000000000000000000000 211 | 0000000000000000000000000000000000000000000000000000000000000000 212 | 0000000000000000000000000000000000000000000000000000000000000000 213 | 0000000000000000000000000000000000000000000000000000000000000000 214 | 0000000000000000000000000000000000000000000000000000000000000000 215 | 0000000000000000000000000000000000000000000000000000000000000000 216 | 0000000000000000000000000000000000000000000000000000000000000000 217 | 0000000000000000000000000000000000000000000000000000000000000000 218 | 0000000000000000000000000000000000000000000000000000000000000000 219 | 0000000000000000000000000000000000000000000000000000000000000000 220 | 0000000000000000000000000000000000000000000000000000000000000000 221 | 0000000000000000000000000000000000000000000000000000000000000000 222 | 0000000000000000000000000000000000000000000000000000000000000000 223 | 0000000000000000000000000000000000000000000000000000000000000000 224 | 0000000000000000000000000000000000000000000000000000000000000000 225 | 0000000000000000000000000000000000000000000000000000000000000000 226 | 0000000000010000000B000000170000001F000000260000002C0000002F0000 227 | 0032000000320000002F0000002C000000260000001F000000170000000B0000 228 | 0001000000000000000000000000000000000000000000000000000000000000 229 | 0000000000000000000000000000000000000000000000000000000000000000 230 | 0000000000000000000000000000000000000000000000000000000000000000 231 | 0000000000000000000000000000000000000000000000000000000000000000 232 | 0000000000000000000000000000000000000000000000000000000000000000 233 | 0000000000000000000000000000000000000000000000000001000000100000 234 | 00230505053139393955515151815A5A5AA1616161C3656565DE666666ED6868 235 | 68F9686868F9666666ED656565DE616161C25A5A5AA152525280373737540505 236 | 0531000000220000001000000001000000000000000000000000000000000000 237 | 0000000000000000000000000000000000000000000000000000000000000000 238 | 0000000000000000000000000000000000000000000000000000000000000000 239 | 0000000000000000000000000000000000000000000000000000000000000000 240 | 0000000000000000000000000000000000000000000000000000000000000000 241 | 0000000000000000000000000000000000040000001B0A0A0A33464646665D5D 242 | 5DB0666666EF686868FF686868FF686868FF686868FF686868FF686868FF6868 243 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6767 244 | 67EE5D5D5DAF444444650A0A0A320000001B0000000400000000000000000000 245 | 0000000000000000000000000000000000000000000000000000000000000000 246 | 0000000000000000000000000000000000000000000000000000000000000000 247 | 0000000000000000000000000000000000000000000000000000000000000000 248 | 0000000000000000000000000000000000000000000000000000000000000000 249 | 000000000000000000030000001C1D1D1D3D5656568E676767EB686868FF6868 250 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 251 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 252 | 68FF686868FF686868FF666666EA5656568C1A1A1A3C0000001B000000020000 253 | 0000000000000000000000000000000000000000000000000000000000000000 254 | 0000000000000000000000000000000000000000000000000000000000000000 255 | 0000000000000000000000000000000000000000000000000000000000000000 256 | 0000000000000000000000000000000000000000000000000000000000000000 257 | 0000000000110F0F0F3357575790676767F3686868FF686868FF686868FF6868 258 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 259 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 260 | 68FF686868FF686868FF686868FF686868FF676767F25656568E0F0F0F320000 261 | 0010000000000000000000000000000000000000000000000000000000000000 262 | 0000000000000000000000000000000000000000000000000000000000000000 263 | 0000000000000000000000000000000000000000000000000000000000000000 264 | 0000000000000000000000000000000000000000000000000000000000020000 265 | 001F44444465656565E1686868FF686868FF686868FF686868FF686868FF6868 266 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 267 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 268 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF666666DF4545 269 | 45640000001F0000000200000000000000000000000000000000000000000000 270 | 0000000000000000000000000000000000000000000000000000000000000000 271 | 0000000000000000000000000000000000000000000000000000000000000000 272 | 00000000000000000000000000000000000000000000000000061111112E5959 273 | 599A686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 274 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 275 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 276 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 277 | 68FF5A5A5AA11111112E00000006000000000000000000000000000000000000 278 | 0000000000000000000000000000000000000000000000000000000000000000 279 | 0000000000000000000000000000000000000000000000000000000000000000 280 | 000000000000000000000000000000000000000000092525253E646464CF6868 281 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 282 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 283 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 284 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 285 | 68FF686868FF646464CD2121213D000000080000000000000000000000000000 286 | 0000000000000000000000000000000000000000000000000000000000000000 287 | 0000000000000000000000000000000000000000000000000000000000000000 288 | 0000000000000000000000000000000000092E2E2E43656565DC686868FF6868 289 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 290 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 291 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 292 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 293 | 68FF686868FF686868FF656565E0323232470000000800000000000000000000 294 | 0000000000000000000000000000000000000000000000000000000000000000 295 | 0000000000000000000000000000000000000000000000000000000000000000 296 | 000000000000000000000000000633333346676767E9686868FF686868FF6868 297 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 298 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 299 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 300 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 301 | 68FF686868FF686868FF686868FF676767E93030304500000006000000000000 302 | 0000000000000000000000000000000000000000000000000000000000000000 303 | 0000000000000000000000000000000000000000000000000000000000000000 304 | 000000000000000000022828283A656565E0686868FF686868FF686868FF6868 305 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 306 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 307 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 308 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 309 | 68FF686868FF686868FF686868FF686868FF666666DF28282839000000020000 310 | 0000000000000000000000000000000000000000000000000000000000000000 311 | 0000000000000000000000000000000000000000000000000000000000000000 312 | 00000000000015151525636363D0686868FF686868FF686868FF686868FF6868 313 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 314 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 315 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 316 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 317 | 68FF686868FF686868FF686868FF686868FF686868FF646464CD161616230000 318 | 0000000000000000000000000000000000000000000000000000000000000000 319 | 0000000000000000000000000000000000000000000000000000000000000000 320 | 0000000000115B5B5B9F686868FF686868FF686868FF686868FF686868FF6868 321 | 68FF535353FF545454FF565656FF595959FF5E5E5EFF656565FF686868FF6868 322 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 323 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 324 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 325 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF5A5A5A9B0000 326 | 0010000000000000000000000000000000000000000000000000000000000000 327 | 0000000000000000000000000000000000000000000000000000000000000000 328 | 000348484863686868FF686868FF686868FF686868FF686868FF686868FF6868 329 | 68FFFEFEFEFFF6F6F6FFE5E5E5FFCECECEFFA6A6A6FF6F6F6FFF595959FF6464 330 | 64FF686868FF686868FF686868FF686868FF686868FF616161FF676767FF6868 331 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 332 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 333 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF4848 334 | 4860000000020000000000000000000000000000000000000000000000000000 335 | 0000000000000000000000000000000000000000000000000000000000001E1E 336 | 1E22656565E0686868FF686868FF686868FF686868FF686868FF686868FF6868 337 | 68FFF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFF7272 338 | 72FF616161FF686868FF686868FF686868FF686868FF8E8E8EFF5C5C5CFF6464 339 | 64FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 340 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 341 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6666 342 | 66E21D1D1D230000000000000000000000000000000000000000000000000000 343 | 0000000000000000000000000000000000000000000000000000000000055959 344 | 5990686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 345 | 68FFE8E8E8FFFFFFFFFFABABABFF989898FFA7A7A7FFC8C8C8FFEEEEEEFFF9F9 346 | F9FF8F8F8FFF666666FF686868FF686868FF666666FFF6F6F6FFE4E4E4FF7A7A 347 | 7AFF5D5D5DFF676767FF686868FF686868FF686868FF686868FF686868FF6868 348 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 349 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 350 | 68FF5757578D0000000400000000000000000000000000000000000000000000 351 | 00000000000000000000000000000000000000000000000000002D2D2D286767 352 | 67F3686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 353 | 68FFD3D3D3FFFFFFFFFF919191FF686868FF686868FF686868FF696969FF9696 354 | 96FFE4E4E4FF787878FF686868FF686868FF848484FFFFFFFFFFFFFFFFFFFDFD 355 | FDFFB1B1B1FF676767FF686868FF686868FF686868FF686868FF686868FF6868 356 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 357 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 358 | 68FF676767F42D2D2D2800000000000000000000000000000000000000000000 359 | 00000000000000000000000000000000000000000000000000015959598D6868 360 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 361 | 68FFB2B2B2FFFFFFFFFF9F9F9FFF686868FF686868FF686868FF686868FF6868 362 | 68FF666666FF5D5D5DFF606060FF686868FFADADADFFFFFFFFFFFFFFFFFFFFFF 363 | FFFFFFFFFFFF979797FF686868FF686868FF686868FF686868FF686868FF6868 364 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 365 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 366 | 68FF686868FF5959598A00000001000000000000000000000000000000000000 367 | 0000000000000000000000000000000000000000000017171716666666EC6868 368 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 369 | 68FF838383FFFFFFFFFFC1C1C1FF686868FF686868FF686868FF686868FF6464 370 | 64FF656565FFB3B3B3FF929292FF585858FFD9D9D9FFFFFFFFFFFFFFFFFFFFFF 371 | FFFFFFFFFFFF979797FF686868FF686868FF686868FF686868FF686868FF6868 372 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 373 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 374 | 68FF686868FF666666EA1A1A1A14000000000000000000000000000000000000 375 | 000000000000000000000000000000000000000000005555555D686868FF6868 376 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 377 | 68FF686868FFD6D6D6FFEAEAEAFF636363FF686868FF686868FF646464FF7777 378 | 77FFEFEFEFFFFFFFFFFFFFFFFFFFF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 379 | FFFFFFFFFFFF979797FF686868FF686868FF686868FF686868FF686868FF6868 380 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 381 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 382 | 68FF686868FF686868FF5252525A000000000000000000000000000000000000 383 | 00000000000000000000000000000000000000000001606060B2686868FF6868 384 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 385 | 68FF686868FF848484FFF9F9F9FF888888FF686868FF666666FF777777FFF7F7 386 | F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 387 | FFFFFFFFFFFF979797FF686868FF686868FF686868FF686868FF686868FF6868 388 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 389 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 390 | 68FF686868FF686868FF5F5F5FAE000000010000000000000000000000000000 391 | 0000000000000000000000000000000000002222220F676767F1686868FF6868 392 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 393 | 68FF686868FF686868FF9A9A9AFFE3E3E3FF686868FF6A6A6AFFEDEDEDFFFFFF 394 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 395 | FFFFFFFFFFFF979797FF686868FF686868FF686868FF686868FF686868FF6868 396 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 397 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 398 | 68FF686868FF686868FF666666EF1414140D0000000000000000000000000000 399 | 00000000000000000000000000000000000054545440686868FF686868FF6868 400 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 401 | 68FF686868FF686868FF686868FF787878FF686868FFB6B6B6FFFFFFFFFFFFFF 402 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 403 | FFFFFFFFFFFF919191FF666666FF686868FF686868FF686868FF686868FF6868 404 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 405 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 406 | 68FF686868FF686868FF686868FF5454543D0000000000000000000000000000 407 | 0000000000000000000000000000000000005E5E5E77686868FF686868FF6868 408 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 409 | 68FF686868FF686868FF686868FF686868FF686868FF9F9F9FFFFFFFFFFFFFFF 410 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 411 | FFFFFFFFFFFFDBDBDBFF666666FF646464FF686868FF686868FF686868FF6868 412 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 413 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 414 | 68FF686868FF686868FF686868FF606060750000000000000000000000000000 415 | 0000000000000000000000000000000000006262629E686868FF686868FF6868 416 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 417 | 68FF686868FF686868FF686868FF636363FF5D5D5DFF5F5F5FFFFEFEFEFFFFFF 418 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 419 | FFFFFFFFFFFFFFFFFFFFEDEDEDFF777777FF616161FF686868FF686868FF6868 420 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 421 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 422 | 68FF686868FF686868FF686868FF6363639B0000000000000000000000000000 423 | 000000000000000000000000000000000000656565C4686868FF686868FF6868 424 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 425 | 68FF686868FF616161FF575757FF7C7C7CFFABABABFFDBDBDBFFFFFFFFFFFFFF 426 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 427 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FF8E8E8EFF5D5D5DFF686868FF6868 428 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 429 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 430 | 68FF686868FF686868FF686868FF646464C10000000000000000000000000000 431 | 000000000000000000000000000000000000666666E0686868FF686868FF6868 432 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 433 | 68FF686868FF9A9A9AFFF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 434 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 435 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFACACACFF5B5B5BFF6767 436 | 67FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 437 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 438 | 68FF686868FF686868FF686868FF676767DF0000000000000000000000000000 439 | 000000000000000000000000000000000000676767ED686868FF686868FF6868 440 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 441 | 68FF686868FF6D6D6DFFE7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 442 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 443 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7FF5D5D 444 | 5DFF666666FF686868FF686868FF686868FF686868FF686868FF686868FF6868 445 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 446 | 68FF686868FF686868FF686868FF676767EB0000000000000000000000000000 447 | 000000000000000000000000000000000000686868F9686868FF686868FF6868 448 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 449 | 68FF686868FF686868FF898989FFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 450 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 451 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9 452 | D9FF636363FF656565FF686868FF686868FF686868FF686868FF686868FF6868 453 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 454 | 68FF686868FF686868FF686868FF686868F80000000000000000000000000000 455 | 000000000000000000000000000000000000696969F9686868FF686868FF6868 456 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 457 | 68FF686868FF686868FF686868FFBABABAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 458 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 459 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 460 | FFFFE7E7E7FF6D6D6DFF646464FF686868FF686868FF686868FF686868FF6868 461 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 462 | 68FF686868FF686868FF686868FF696969F80000000000000000000000000000 463 | 000000000000000000000000000000000000696969ED686868FF686868FF6868 464 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 465 | 68FF686868FF686868FF686868FF6D6D6DFF9A9A9AFF9A9A9AFF9A9A9AFF9A9A 466 | 9AFF9A9A9AFF9C9C9CFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 467 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 468 | FFFFFFFFFFFFEEEEEEFF757575FF656565FF686868FF686868FF686868FF6868 469 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 470 | 68FF686868FF686868FF686868FF696969EB0000000000000000000000000000 471 | 0000000000000000000000000000000000006A6A6ADF686868FF686868FF6868 472 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 473 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 474 | 68FF686868FF686868FF858585FFF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 475 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 476 | FFFFFFFFFFFFFFFFFFFFF4F4F4FF6F6F6FFF676767FF686868FF686868FF6868 477 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 478 | 68FF686868FF686868FF686868FF6B6B6BDE0000000000000000000000000000 479 | 0000000000000000000000000000000000006C6C6CC4686868FF686868FF6868 480 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 481 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 482 | 68FF686868FF686868FF686868FF999999FFFEFEFEFFFFFFFFFFFFFFFFFFFFFF 483 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 484 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5FF656565FF686868FF686868FF6868 485 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 486 | 68FF686868FF686868FF686868FF6B6B6BC10000000000000000000000000000 487 | 0000000000000000000000000000000000006E6E6E9E686868FF686868FF6868 488 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 489 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 490 | 68FF686868FF686868FF686868FF686868FFB1B1B1FFFFFFFFFFFFFFFFFFFFFF 491 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3FF9B9B9BFF717171FF8686 492 | 86FFDCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7FF626262FF686868FF6868 493 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 494 | 68FF686868FF686868FF686868FF6D6D6D9B0000000000000000000000000000 495 | 00000000000000000000000000000000000070707076686868FF686868FF6868 496 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 497 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 498 | 68FF686868FF686868FF686868FF686868FF696969FFC8C8C8FFFFFFFFFFFFFF 499 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9AFF686868FF686868FF6868 500 | 68FF737373FFF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFF898989FF686868FF6868 501 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 502 | 68FF686868FF686868FF686868FF707070740000000000000000000000000000 503 | 0000000000000000000000000000000000007575753D696969FF686868FF6868 504 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 505 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 506 | 68FF686868FF686868FF686868FF686868FF686868FF6D6D6DFFDBDBDBFFFFFF 507 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D6D6DFF686868FF686868FF6868 508 | 68FF686868FFD0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9FF636363FF6868 509 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 510 | 68FF686868FF686868FF696969FF767676380000000000000000000000000000 511 | 000000000000000000000000000000000000999999056C6C6CF1686868FF6868 512 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 513 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 514 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF717171FFE3E3 515 | E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777FF676767FF686868FF6868 516 | 68FF5F5F5FFFE5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8EFF6868 517 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 518 | 68FF686868FF686868FF6C6C6CEF555555030000000000000000000000000000 519 | 000000000000000000000000000000000000000000006F6F6FB1686868FF6868 520 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 521 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 522 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF7777 523 | 77FFEBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6FF606060FF595959FF5757 524 | 57FFA7A7A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCBFF6767 525 | 67FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 526 | 68FF686868FF686868FF707070AD000000000000000000000000000000000000 527 | 0000000000000000000000000000000000000000000075757557696969FF6868 528 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 529 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 530 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 531 | 68FF7E7E7EFFF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2FFCFCFCFFFE5E5 532 | E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FF6A6A 533 | 6AFF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 534 | 68FF686868FF696969FF76767654000000000000000000000000000000000000 535 | 000000000000000000000000000000000000000000006D6D6D076E6E6EED6868 536 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 537 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 538 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 539 | 68FF686868FF868686FFF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 540 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8888 541 | 88FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 542 | 68FF686868FF6F6F6FEC6D6D6D07000000000000000000000000000000000000 543 | 00000000000000000000000000000000000000000000000000007474748B6969 544 | 69FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 545 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 546 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 547 | 68FF686868FF686868FF7D7D7DFFE7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 548 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7A7 549 | A7FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 550 | 68FF696969FF7676768600000000000000000000000000000000000000000000 551 | 0000000000000000000000000000000000000000000000000000797979156F6F 552 | 6FF4686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 553 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 554 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 555 | 68FF686868FF686868FF686868FF717171FFCACACAFFFEFEFEFFFFFFFFFFFFFF 556 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8 557 | C8FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 558 | 68FF707070F47474741600000000000000000000000000000000000000000000 559 | 0000000000000000000000000000000000000000000000000000000000007575 560 | 758E6A6A6AFF686868FF686868FF686868FF686868FF686868FF686868FF6868 561 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 562 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 563 | 68FF686868FF686868FF686868FF686868FF686868FF8A8A8AFFDCDCDCFFFFFF 564 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1 565 | E1FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6A6A 566 | 6AFF7676768A0000000000000000000000000000000000000000000000000000 567 | 0000000000000000000000000000000000000000000000000000000000007474 568 | 740B727272E1686868FF686868FF686868FF686868FF686868FF686868FF6868 569 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 570 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 571 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF8989 572 | 89FFC7C7C7FFF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 573 | F1FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF7373 574 | 73E36A6A6A0C0000000000000000000000000000000000000000000000000000 575 | 0000000000000000000000000000000000000000000000000000000000000000 576 | 0000787878576E6E6EFF686868FF686868FF686868FF686868FF686868FF6868 577 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 578 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 579 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 580 | 68FF686868FF6C6C6CFF8B8B8BFFABABABFFCCCCCCFFE4E4E4FFF3F3F3FFFDFD 581 | FDFF686868FF686868FF686868FF686868FF686868FF686868FF6E6E6EFF7878 582 | 7853000000000000000000000000000000000000000000000000000000000000 583 | 0000000000000000000000000000000000000000000000000000000000000000 584 | 0000000000007575759F6B6B6BFF686868FF686868FF686868FF686868FF6868 585 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 586 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 587 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 588 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 589 | 68FF686868FF686868FF686868FF686868FF686868FF6B6B6BFF7676769A0000 590 | 0000000000000000000000000000000000000000000000000000000000000000 591 | 0000000000000000000000000000000000000000000000000000000000000000 592 | 00000000000071717109757575D36A6A6AFF686868FF686868FF686868FF6868 593 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 594 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 595 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 596 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 597 | 68FF686868FF686868FF686868FF686868FF6A6A6AFF757575D1808080080000 598 | 0000000000000000000000000000000000000000000000000000000000000000 599 | 0000000000000000000000000000000000000000000000000000000000000000 600 | 000000000000000000007777771E757575E1696969FF686868FF686868FF6868 601 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 602 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 603 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 604 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 605 | 68FF686868FF686868FF686868FF696969FF757575E578787820000000000000 606 | 0000000000000000000000000000000000000000000000000000000000000000 607 | 0000000000000000000000000000000000000000000000000000000000000000 608 | 00000000000000000000000000007A7A7A2C757575EC6A6A6AFF686868FF6868 609 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 610 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 611 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 612 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 613 | 68FF686868FF686868FF6A6A6AFF757575EB7676762900000000000000000000 614 | 0000000000000000000000000000000000000000000000000000000000000000 615 | 0000000000000000000000000000000000000000000000000000000000000000 616 | 0000000000000000000000000000000000007C7C7C27767676DF6A6A6AFF6868 617 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 618 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 619 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 620 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 621 | 68FF686868FF6A6A6AFF757575E27979792A0000000000000000000000000000 622 | 0000000000000000000000000000000000000000000000000000000000000000 623 | 0000000000000000000000000000000000000000000000000000000000000000 624 | 000000000000000000000000000000000000000000007373731F767676D46E6E 625 | 6EFF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 626 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 627 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 628 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 629 | 68FF6E6E6EFF767676D27B7B7B1D000000000000000000000000000000000000 630 | 0000000000000000000000000000000000000000000000000000000000000000 631 | 0000000000000000000000000000000000000000000000000000000000000000 632 | 0000000000000000000000000000000000000000000000000000717171097777 633 | 7798727272FF6A6A6AFF686868FF686868FF686868FF686868FF686868FF6868 634 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 635 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 636 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF6A6A6AFF7272 637 | 72FF767676A87474740B00000000000000000000000000000000000000000000 638 | 0000000000000000000000000000000000000000000000000000000000000000 639 | 0000000000000000000000000000000000000000000000000000000000000000 640 | 0000000000000000000000000000000000000000000000000000000000000000 641 | 00007A7A7A56767676E56F6F6FFF696969FF686868FF686868FF686868FF6868 642 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 643 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 644 | 68FF686868FF686868FF686868FF686868FF696969FF6F6F6FFF777777E47878 645 | 7855000000000000000000000000000000000000000000000000000000000000 646 | 0000000000000000000000000000000000000000000000000000000000000000 647 | 0000000000000000000000000000000000000000000000000000000000000000 648 | 0000000000000000000000000000000000000000000000000000000000000000 649 | 0000000000007676760D7676768F777777F56F6F6FFF696969FF686868FF6868 650 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 651 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868 652 | 68FF686868FF686868FF696969FF6F6F6FFF777777F57777778D6A6A6A0C0000 653 | 0000000000000000000000000000000000000000000000000000000000000000 654 | 0000000000000000000000000000000000000000000000000000000000000000 655 | 0000000000000000000000000000000000000000000000000000000000000000 656 | 0000000000000000000000000000000000000000000000000000000000000000 657 | 00000000000000000000000000007A7A7A177777778B777777EE727272FF6D6D 658 | 6DFF696969FF686868FF686868FF686868FF686868FF686868FF686868FF6868 659 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6969 660 | 69FF6D6D6DFF737373FF777777EE7676768A7474741600000000000000000000 661 | 0000000000000000000000000000000000000000000000000000000000000000 662 | 0000000000000000000000000000000000000000000000000000000000000000 663 | 0000000000000000000000000000000000000000000000000000000000000000 664 | 0000000000000000000000000000000000000000000000000000000000000000 665 | 000000000000000000000000000000000000000000006D6D6D07787878577777 666 | 77B4787878F3747474FF707070FF6E6E6EFF6C6C6CFF6A6A6AFF696969FF6969 667 | 69FF696969FF696969FF6A6A6AFF6C6C6CFF6E6E6EFF707070FF747474FF7777 668 | 77F2787878B37A7A7A566D6D6D07000000000000000000000000000000000000 669 | 0000000000000000000000000000000000000000000000000000000000000000 670 | 0000000000000000000000000000000000000000000000000000000000000000 671 | 0000000000000000000000000000000000000000000000000000000000000000 672 | 0000000000000000000000000000000000000000000000000000000000000000 673 | 0000000000000000000000000000000000000000000000000000000000000000 674 | 0000808080047373733C7777777A777777A1777777C7787878E1777777F07777 675 | 77FA777777FA777777F0787878E1777777C7777777A17777777A7373733C8080 676 | 8004000000000000000000000000000000000000000000000000000000000000 677 | 0000000000000000000000000000000000000000000000000000000000000000 678 | 0000000000000000000000000000000000000000000000000000000000000000 679 | 0000000000000000000000000000000000000000000000000000000000000000 680 | 0000000000000000000000000000000000000000000000000000000000000000 681 | 0000000000000000000000000000000000000000000000000000000000000000 682 | 0000000000000000000000000000000000000000000000000000000000000000 683 | 0000000000000000000000000000000000000000000000000000000000000000 684 | 0000000000000000000000000000000000000000000000000000000000000000 685 | 0000000000000000000000000000000000000000000000000000000000000000 686 | 0000000000000000000000000000000000000000000000000000000000000000 687 | 0000000000000000000000000000000000000000000000000000000000000000 688 | 0000000000000000000000000000000000000000000000000000000000000000 689 | 0000000000000000000000000000000000000000000000000000000000000000 690 | 0000000000000000000000000000000000000000000000000000000000000000 691 | 0000000000000000000000000000000000000000000000000000000000000000 692 | 0000000000000000000000000000000000000000000000000000000000000000 693 | 0000000000000000000000000000000000000000000000000000000000000000 694 | 0000000000000000000000000000000000000000000000000000000000000000 695 | 0000000000000000000000000000000000000000000000000000000000000000 696 | 0000000000000000000000000000000000000000000000000000000000000000 697 | 0000000000000000000000000000000000000000000000000000000000000000 698 | 0000000000000000000000000000000000000000000000000000000000000000 699 | 0000000000000000000000000000000000000000000000000000000000000000 700 | 0000000000000000000000000000000000000000000000000000000000000000 701 | 0000000000000000000000000000000000000000000000000000000000000000 702 | 0000000000000000000000000000000000000000000000000000000000000000 703 | 0000000000000000000000000000000000000000000000000000000000000000 704 | 0000000000000000000000000000000000000000000000000000000000000000 705 | 0000000000000000000000000000000000000000000000000000000000000000 706 | 0000000000000000000000000000000000000000000000000000000000000000 707 | 0000000000000000000000000000000000000000000000000000000000000000 708 | 0000000000000000000000000000000000000000000000000000000000000000 709 | 0000000000000000000000000000000000000000000000000000000000000000 710 | 0000000000000000000000000000000000000000000000000000000000000000 711 | 0000000000000000000000000000000000000000000000000000000000000000 712 | 0000000000000000000000000000000000000000000000000000000000000000 713 | 0000000000000000000000000000000000000000000000000000000000000000 714 | 0000000000000000000000000000000000000000000000000000000000000000 715 | 0000000000000000000000000000000000000000000000000000000000000000 716 | 0000000000000000000000000000000000000000000000000000000000000000 717 | 0000000000000000000000000000000000000000000000000000000000000000 718 | 0000000000000000000000000000000000000000000000000000000000000000 719 | 0000000000000000000000000000000000000000000000000000000000000000 720 | 0000000000000000000000000000000000000000000000000000000000000000 721 | 0000000000000000000000000000000000000000000000000000000000000000 722 | 0000000000000000000000000000000000000000000000000000000000000000 723 | 0000000000000000000000000000000000000000000000000000000000000000 724 | 0000000000000000000000000000000000000000000000000000000000000000 725 | 0000000000000000000000000000000000000000000000000000000000000000 726 | 0000000000000000000000000000000000000000000000000000000000000000 727 | 0000 728 | } 729 | Hint = 'Startup Watcher' 730 | Visible = True 731 | OnClick = TrayIcon1Click 732 | left = 1124 733 | top = 300 734 | end 735 | object Timer1: TTimer 736 | Interval = 600000 737 | OnTimer = Timer1Timer 738 | left = 1124 739 | top = 116 740 | end 741 | object PopupMenu1: TPopupMenu 742 | left = 1124 743 | top = 364 744 | object MenuItem1: TMenuItem 745 | Caption = 'Show Startup Watcher' 746 | OnClick = MenuItem1Click 747 | end 748 | object MenuItem4: TMenuItem 749 | Caption = 'Hide Startup Watcher' 750 | OnClick = MenuItem4Click 751 | end 752 | object MenuItem6: TMenuItem 753 | Caption = '-' 754 | end 755 | object MenuItem10: TMenuItem 756 | Caption = 'Disable Watcher' 757 | OnClick = MenuItem10Click 758 | end 759 | object MenuItem5: TMenuItem 760 | Caption = 'Refresh All' 761 | OnClick = MenuItem5Click 762 | end 763 | object MenuItem8: TMenuItem 764 | Caption = '-' 765 | end 766 | object MenuItem2: TMenuItem 767 | Caption = 'Disable Tray Icon' 768 | OnClick = MenuItem2Click 769 | end 770 | object MenuItem7: TMenuItem 771 | Caption = '-' 772 | end 773 | object MenuItem3: TMenuItem 774 | Caption = 'Quit' 775 | OnClick = MenuItem3Click 776 | end 777 | end 778 | object MainMenu1: TMainMenu 779 | left = 1124 780 | top = 420 781 | object MenuItem9: TMenuItem 782 | Caption = 'Action' 783 | object MenuItem13: TMenuItem 784 | Caption = 'Refresh all items' 785 | OnClick = MenuItem13Click 786 | end 787 | object MenuItem18: TMenuItem 788 | Caption = '-' 789 | end 790 | object MenuItem15: TMenuItem 791 | Caption = 'Close to tray' 792 | OnClick = MenuItem15Click 793 | end 794 | object MenuItem16: TMenuItem 795 | Caption = 'Disable tray' 796 | OnClick = MenuItem16Click 797 | end 798 | object MenuItem17: TMenuItem 799 | Caption = '-' 800 | end 801 | object MenuItem14: TMenuItem 802 | Caption = 'Quit' 803 | OnClick = MenuItem14Click 804 | end 805 | end 806 | object MenuItem11: TMenuItem 807 | Caption = 'Help' 808 | object MenuItem12: TMenuItem 809 | Caption = 'About' 810 | OnClick = MenuItem12Click 811 | end 812 | end 813 | end 814 | object Timer2: TTimer 815 | Enabled = False 816 | Interval = 8000 817 | OnTimer = Timer2Timer 818 | left = 1124 819 | top = 172 820 | end 821 | object Timer3: TTimer 822 | Enabled = False 823 | Interval = 8000 824 | OnTimer = Timer3Timer 825 | left = 1124 826 | top = 236 827 | end 828 | end 829 | -------------------------------------------------------------------------------- /unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | {$mode objfpc}{$H+} 4 | 5 | interface 6 | 7 | uses 8 | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, 9 | StdCtrls, ComCtrls, Menus; 10 | 11 | type 12 | 13 | { TForm1 } 14 | 15 | TForm1 = class(TForm) 16 | Button1: TButton; 17 | Button3: TButton; 18 | Button4: TButton; 19 | Button5: TButton; 20 | Button6: TButton; 21 | Edit1: TEdit; 22 | GroupBox1: TGroupBox; 23 | Label1: TLabel; 24 | Label2: TLabel; 25 | MainMenu1: TMainMenu; 26 | Memo1: TMemo; 27 | Memo2: TMemo; 28 | Memo3: TMemo; 29 | MenuItem1: TMenuItem; 30 | MenuItem10: TMenuItem; 31 | MenuItem11: TMenuItem; 32 | MenuItem12: TMenuItem; 33 | MenuItem13: TMenuItem; 34 | MenuItem14: TMenuItem; 35 | MenuItem15: TMenuItem; 36 | MenuItem16: TMenuItem; 37 | MenuItem17: TMenuItem; 38 | MenuItem18: TMenuItem; 39 | MenuItem2: TMenuItem; 40 | MenuItem3: TMenuItem; 41 | MenuItem4: TMenuItem; 42 | MenuItem5: TMenuItem; 43 | MenuItem6: TMenuItem; 44 | MenuItem7: TMenuItem; 45 | MenuItem8: TMenuItem; 46 | MenuItem9: TMenuItem; 47 | PopupMenu1: TPopupMenu; 48 | TabControl1: TTabControl; 49 | Timer1: TTimer; 50 | Timer2: TTimer; 51 | Timer3: TTimer; 52 | TrayIcon1: TTrayIcon; 53 | procedure Button1Click(Sender: TObject); 54 | procedure Button3Click(Sender: TObject); 55 | procedure Button4Click(Sender: TObject); 56 | procedure Button5Click(Sender: TObject); 57 | procedure Button6Click(Sender: TObject); 58 | procedure FormActivate(Sender: TObject); 59 | procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); 60 | procedure FormCreate(Sender: TObject); 61 | procedure MenuItem10Click(Sender: TObject); 62 | procedure MenuItem12Click(Sender: TObject); 63 | procedure MenuItem13Click(Sender: TObject); 64 | procedure MenuItem14Click(Sender: TObject); 65 | procedure MenuItem15Click(Sender: TObject); 66 | procedure MenuItem16Click(Sender: TObject); 67 | procedure MenuItem1Click(Sender: TObject); 68 | procedure MenuItem2Click(Sender: TObject); 69 | procedure MenuItem3Click(Sender: TObject); 70 | procedure MenuItem4Click(Sender: TObject); 71 | procedure MenuItem5Click(Sender: TObject); 72 | procedure TabControl1Change(Sender: TObject); 73 | procedure Timer1Timer(Sender: TObject); 74 | procedure Timer2Timer(Sender: TObject); 75 | procedure Timer3Timer(Sender: TObject); 76 | procedure TrayIcon1Click(Sender: TObject); 77 | private 78 | { private declarations } 79 | public 80 | { public declarations } 81 | var tab0 : string; 82 | var dif0 : string; 83 | var tab1 : string; 84 | var dif1 : string; 85 | var tab2 : string; 86 | var dif2 : string; 87 | var tab3 : string; 88 | var dif3 : string; 89 | var tab4 : string; 90 | var dif4 : string; 91 | var tab5 : string; 92 | var dif5 : string; 93 | var tab6 : string; 94 | var dif6 : string; 95 | var tab7 : string; 96 | var dif7 : string; 97 | var tab8 : string; 98 | var dif8 : string; 99 | var tab9 : string; 100 | var dif9 : string; 101 | var tab10 : string; 102 | var dif10 : string; 103 | var tab11 : string; 104 | var dif11 : string; 105 | var tab12 : string; 106 | var dif12 : string; 107 | var tab13 : string; 108 | var dif13 : string; 109 | var tab14 : string; 110 | var dif14 : string; 111 | var tab15 : string; 112 | var dif15 : string; 113 | var tab16 : string; 114 | var dif16 : string; 115 | var tab17 : string; 116 | var dif17 : string; 117 | var tab18 : string; 118 | var dif18 : string; 119 | var tab19 : string; 120 | var dif19 : string; 121 | var tab20 : string; 122 | var dif20 : string; 123 | var tab21 : string; 124 | var dif21 : string; 125 | var tab22 : string; 126 | var dif22 : string; 127 | var tab23 : string; 128 | var dif23 : string; 129 | var tab24 : string; 130 | var dif24 : string; 131 | var tab25 : string; 132 | var dif25 : string; 133 | var tab26 : string; 134 | var dif26 : string; 135 | var tab27 : string; 136 | var dif27 : string; 137 | var tab28 : string; 138 | var dif28 : string; 139 | var tab29 : string; 140 | var dif29 : string; 141 | var tab30 : string; 142 | var dif30 : string; 143 | var tab31 : string; 144 | var dif31 : string; 145 | var homeDir : string; 146 | var moveScript : string; 147 | var updateScript : string; 148 | var diffCompare : string; 149 | var changesDetected: boolean; 150 | var changesDetectedIndex: integer; 151 | 152 | end; 153 | 154 | var 155 | Form1: TForm1; 156 | 157 | implementation 158 | uses 159 | Unit2; 160 | 161 | {$R *.lfm} 162 | 163 | { TForm1 } 164 | 165 | procedure TForm1.FormCreate(Sender: TObject); 166 | // ------------------------------------------------------------------------------------- 167 | // Initializing The Application At Startup 168 | begin 169 | 170 | // ----------------------------------------------------------------------------------- 171 | // Init Variables 172 | 173 | changesDetected:=false; 174 | changesDetectedIndex:=0; 175 | tab0:='Refresh needed'; 176 | tab1:='Refresh needed'; 177 | tab2:='Refresh needed'; 178 | tab3:='Refresh needed'; 179 | tab4:='Refresh needed'; 180 | tab5:='Refresh needed'; 181 | tab6:='Refresh needed'; 182 | tab8:='Refresh needed'; 183 | tab9:='Refresh needed'; 184 | tab10:='Refresh needed'; 185 | tab11:='Refresh needed'; 186 | tab12:='Refresh needed'; 187 | tab13:='Refresh needed'; 188 | tab14:='Refresh needed'; 189 | tab15:='Refresh needed'; 190 | tab16:='Refresh needed'; 191 | tab17:='Refresh needed'; 192 | tab18:='Refresh needed'; 193 | tab19:='Refresh needed'; 194 | tab20:='Refresh needed'; 195 | tab21:='Refresh needed'; 196 | tab22:='Refresh needed'; 197 | tab23:='Refresh needed'; 198 | tab24:='Refresh needed'; 199 | tab25:='Refresh needed'; 200 | tab26:='Refresh needed'; 201 | tab27:='Refresh needed'; 202 | tab28:='Refresh needed'; 203 | tab29:='Refresh needed'; 204 | tab30:='Refresh needed'; 205 | tab31:='Refresh needed'; 206 | 207 | // ----------------------------------------------------------------------------------- 208 | // Get User Dir 209 | 210 | homeDir:=GetUserDir(); 211 | 212 | // ----------------------------------------------------------------------------------- 213 | // Check/create application directories/datas 214 | 215 | If Not DirectoryExists(homeDir +'.startup-watcher') then 216 | If Not CreateDir (homeDir + '.startup-watcher') Then 217 | Writeln ('Startup-watcher: failed to create config directory ' +homeDir + '.startup-watcher/ !') 218 | else 219 | Writeln ('Startup-watcher: created config directory ' +homeDir + '.startup-watcher/ directory'); 220 | 221 | If Not DirectoryExists(homeDir +'.startup-watcher/backup') then 222 | If Not CreateDir (homeDir + '/.startup-watcher/backup') Then 223 | Writeln ('Startup-watcher: failed to create backup directory ' +homeDir + '.startup-watcher/backup/ !') 224 | else 225 | Writeln ('Startup-watcher: created backup directory ' +homeDir + '.startup-watcher/backup/ directory'); 226 | 227 | If Not DirectoryExists(homeDir +'.startup-watcher/changes') then 228 | If Not CreateDir (homeDir + '/.startup-watcher/changes') Then 229 | Writeln ('Startup-watcher: failed to create changes directory ' +homeDir + '.startup-watcher/changes/ !') 230 | else 231 | Writeln ('Startup-watcher: created changes directory ' +homeDir + '.startup-watcher/changes/ directory'); 232 | 233 | // ----------------------------------------------------------------------------------- 234 | // Initialize update script variable 235 | 236 | updateScript:=''; 237 | 238 | //0 Systemd-Services Root systemctl list-unit-files; systemctl -l --type service --all 239 | updateScript:=updateScript +'/bin/systemctl list-unit-files | sort > '; 240 | updateScript:=updateScript +homeDir + '.startup-watcher/up0 2>> '+homeDir +'.startup-watcher/up0 &'; 241 | 242 | //1 Systemd-Timers x Root already watched in services (systemctl list-timers --all) 243 | //updateScript:=updateScript +' > '; 244 | //updateScript:=updateScript +homeDir + '.startup-watcher/up1 2>> '+homeDir +'.startup-watcher/up1 &'; 245 | //Warning: check other code section if this section is to be re enabled to uncoment related code. 246 | tab1:='Inactive/disabled'; 247 | 248 | //2 Systemd-Init.d Root ls -l /etc/init.d/ 249 | updateScript:=updateScript +'/bin/ls -l /etc/init.d/ > '; 250 | updateScript:=updateScript +homeDir + '.startup-watcher/up2 2>> '+homeDir +'.startup-watcher/up2 &'; 251 | 252 | //3 Cron-Scheduler Root ls -l /etc/cron*; cat /var/spool/cron/* 253 | updateScript:=updateScript +'/bin/ls -l /etc/cron* > '; 254 | updateScript:=updateScript +homeDir + '.startup-watcher/up3 2>> '+homeDir +'.startup-watcher/up3;'; 255 | updateScript:=updateScript + '/bin/echo >> '; 256 | updateScript:=updateScript +homeDir + '.startup-watcher/up3;'; 257 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> '; 258 | updateScript:=updateScript +homeDir + '.startup-watcher/up3;'; 259 | updateScript:=updateScript + '/bin/echo Cat output >> '; 260 | updateScript:=updateScript +homeDir + '.startup-watcher/up3;'; 261 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> '; 262 | updateScript:=updateScript +homeDir + '.startup-watcher/up3;'; 263 | updateScript:=updateScript +'/bin/cat /var/spool/cron/* >> '; 264 | updateScript:=updateScript +homeDir + '.startup-watcher/up3 2>> '+homeDir +'.startup-watcher/up3 &'; 265 | 266 | //4 DBus-Services Root ls -l /usr/share/dbus-1/services/ 267 | updateScript:=updateScript +'/bin/ls -l /usr/share/dbus-1/services/ > '; 268 | updateScript:=updateScript +homeDir + '.startup-watcher/up4 2>> '+homeDir +'.startup-watcher/up4 &'; 269 | 270 | //5 XDG-Autostart Root ls -l /etc/xdg/autostart/ 271 | updateScript:=updateScript +'/bin/ls -l /etc/xdg/autostart/ > '; 272 | updateScript:=updateScript +homeDir + '.startup-watcher/up5 2>> '+homeDir +'.startup-watcher/up5 &'; 273 | 274 | //6 XDG-Openbox Root ls -l /etc/xdg/openbox/; cat /etc/xdg/openbox/* 275 | updateScript:=updateScript +'/bin/ls -l /etc/xdg/openbox/ > '; 276 | updateScript:=updateScript +homeDir + '.startup-watcher/up6 2>> '+homeDir +'.startup-watcher/up6;'; 277 | updateScript:=updateScript + '/bin/echo >> '; 278 | updateScript:=updateScript +homeDir + '.startup-watcher/up6;'; 279 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> '; 280 | updateScript:=updateScript +homeDir + '.startup-watcher/up6;'; 281 | updateScript:=updateScript + '/bin/echo Cat output >> '; 282 | updateScript:=updateScript +homeDir + '.startup-watcher/up6;'; 283 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> '; 284 | updateScript:=updateScript +homeDir + '.startup-watcher/up6;'; 285 | updateScript:=updateScript +'/bin/cat /etc/xdg/openbox/* >> '; 286 | updateScript:=updateScript +homeDir + '.startup-watcher/up6 2>> '+homeDir +'.startup-watcher/up6 &'; 287 | 288 | //7 X11-Xinitrc Root cat /etc/X11/xinit/xinitrc 289 | updateScript:=updateScript +'/bin/cat /etc/X11/xinit/xinitrc > '; 290 | updateScript:=updateScript +homeDir + '.startup-watcher/up7 2>> '+homeDir +'.startup-watcher/up7 &'; 291 | 292 | //8 Udev-Rules Root ls -l /udev/rules.d/; cat /udev/rules.d/* 293 | updateScript:=updateScript +'/bin/ls -l /etc/udev/rules.d/ > '; 294 | updateScript:=updateScript +homeDir + '.startup-watcher/up8 2>> '+homeDir +'.startup-watcher/up8;'; 295 | updateScript:=updateScript + '/bin/echo >> '; 296 | updateScript:=updateScript +homeDir + '.startup-watcher/up8;'; 297 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> '; 298 | updateScript:=updateScript +homeDir + '.startup-watcher/up8;'; 299 | updateScript:=updateScript + '/bin/echo Cat output >> '; 300 | updateScript:=updateScript +homeDir + '.startup-watcher/up8;'; 301 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> '; 302 | updateScript:=updateScript +homeDir + '.startup-watcher/up8;'; 303 | updateScript:=updateScript +'/bin/cat /etc/udev/rules.d/* >> '; 304 | updateScript:=updateScript +homeDir + '.startup-watcher/up8 2>> '+homeDir +'.startup-watcher/up8 &'; 305 | 306 | //9 ETC-Profile.d Root ls -l /etc/profile.d/; cat /etc/profile.d/* (started with shell) 307 | updateScript:=updateScript +'/bin/ls -l /etc/profile.d/ > '; 308 | updateScript:=updateScript +homeDir + '.startup-watcher/up9 2>> '+homeDir +'.startup-watcher/up9;'; 309 | updateScript:=updateScript + '/bin/echo >> '; 310 | updateScript:=updateScript +homeDir + '.startup-watcher/up9;'; 311 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> '; 312 | updateScript:=updateScript +homeDir + '.startup-watcher/up9;'; 313 | updateScript:=updateScript + '/bin/echo Cat output >> '; 314 | updateScript:=updateScript +homeDir + '.startup-watcher/up9;'; 315 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> '; 316 | updateScript:=updateScript +homeDir + '.startup-watcher/up9;'; 317 | updateScript:=updateScript +'/bin/cat /etc/profile.d/* >> '; 318 | updateScript:=updateScript +homeDir + '.startup-watcher/up9 2>> '+homeDir +'.startup-watcher/up9 &'; 319 | 320 | //10 ETC-Profile Root cat /etc/profile 321 | updateScript:=updateScript +'/bin/cat /etc/profile > '; 322 | updateScript:=updateScript +homeDir + '.startup-watcher/up10 2>> '+homeDir +'.startup-watcher/up10 &'; 323 | 324 | //11 RC.D-RC.Local Root cat /etc/rc.d/rc.local 325 | updateScript:=updateScript +'cat /etc/rc.d/rc.local > '; 326 | updateScript:=updateScript +homeDir + '.startup-watcher/up11 2>> '+homeDir +'.startup-watcher/up11 &'; 327 | 328 | //12 RC.Local Root cat /etc/rc.local 329 | updateScript:=updateScript +'/bin/cat /etc/rc.local > '; 330 | updateScript:=updateScript +homeDir + '.startup-watcher/up12 2>> '+homeDir +'.startup-watcher/up12 &'; 331 | 332 | //13 Xsession-LightDM Root cat /etc/lightdm/Xsession 333 | updateScript:=updateScript +'/bin/cat /etc/lightdm/Xsession > '; 334 | updateScript:=updateScript +homeDir + '.startup-watcher/up13 2>> '+homeDir +'.startup-watcher/up13 &'; 335 | 336 | //14 Xsession-LXDM Root cat /etc/lxdm/Xsession 337 | updateScript:=updateScript +'/bin/cat /etc/lxdm/Xsession > '; 338 | updateScript:=updateScript +homeDir + '.startup-watcher/up14 2>> '+homeDir +'.startup-watcher/up14 &'; 339 | 340 | //15 Xsession-SDDM Root cat /usr/share/sddm/scripts/Xsession 341 | updateScript:=updateScript +'/bin/cat /usr/share/sddm/scripts/Xsession > '; 342 | updateScript:=updateScript +homeDir + '.startup-watcher/up15 2>> '+homeDir +'.startup-watcher/up15 &'; 343 | 344 | //16 Xsession-GDM Root cat /etc/gdm/Xsession 345 | updateScript:=updateScript +'/bin/cat /etc/gdm/Xsession > '; 346 | updateScript:=updateScript +homeDir + '.startup-watcher/up16 2>> '+homeDir +'.startup-watcher/up16 &'; 347 | 348 | //17 Systemd-Services User systemctl list-unit-files --user 349 | updateScript:=updateScript +'/bin/systemctl list-unit-files --user | sort > '; 350 | updateScript:=updateScript +homeDir + '.startup-watcher/up17 2>> '+homeDir +'.startup-watcher/up17 &'; 351 | 352 | //18 Systemd-Timers x User already watched in services (systemctl list-timers --all --user) 353 | //updateScript:=updateScript +' > '; 354 | //updateScript:=updateScript +homeDir + '.startup-watcher/up18 2>> '+homeDir +'.startup-watcher/up18 &'; 355 | tab18:='Inactive/disabled'; 356 | 357 | //19 Cron-Scheduler User crontab -l 358 | updateScript:=updateScript +'/bin/crontab -l > '; 359 | updateScript:=updateScript +homeDir + '.startup-watcher/up19 2>> '+homeDir +'.startup-watcher/up19 &'; 360 | 361 | //20 XDG-Openbox User ls -l ~/.config/openbox/; cat ~/.config/openbox/* (environment & autostart) 362 | updateScript:=updateScript +'/bin/ls -l ' +homeDir + '.config/openbox/ > '; 363 | updateScript:=updateScript +homeDir + '.startup-watcher/up20 2>> '+homeDir +'.startup-watcher/up20;'; 364 | updateScript:=updateScript + '/bin/echo >> '; 365 | updateScript:=updateScript +homeDir + '.startup-watcher/up20;'; 366 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> '; 367 | updateScript:=updateScript +homeDir + '.startup-watcher/up20;'; 368 | updateScript:=updateScript + '/bin/echo Cat output >> '; 369 | updateScript:=updateScript +homeDir + '.startup-watcher/up20;'; 370 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> '; 371 | updateScript:=updateScript +homeDir + '.startup-watcher/up20;'; 372 | updateScript:=updateScript +'/bin/cat ' +homeDir + '.config/openbox/* >> '; 373 | updateScript:=updateScript +homeDir + '.startup-watcher/up20 2>> '+homeDir +'.startup-watcher/up20 &'; 374 | 375 | //21 X11-Xinitrc x User not yet implemented (~/.xinitrc) 376 | //updateScript:=updateScript +' > '; 377 | //updateScript:=updateScript +homeDir + '.startup-watcher/up21 2>> '+homeDir +'.startup-watcher/up21 &'; 378 | tab21:='Inactive/disabled'; 379 | 380 | //22 KDE-Environment User ls -l ~/.config/plasma-workspace/env/ 381 | updateScript:=updateScript +'/bin/ls -l ' +homeDir + '.config/plasma-workspace/env/ > '; 382 | updateScript:=updateScript +homeDir + '.startup-watcher/up22 2>> '+homeDir +'.startup-watcher/up22 &'; 383 | 384 | //23 KDE-Autostart User ls -l ~/.kde/Autostart/ 385 | updateScript:=updateScript +'/bin/ls -l ' +homeDir + '.kde/Autostart/ > '; 386 | updateScript:=updateScript +homeDir + '.startup-watcher/up23 2>> '+homeDir +'.startup-watcher/up23 &'; 387 | 388 | //24 KDE-Shutdown User ls -l ~/.config/plasma-workspace/shutdown/ 389 | updateScript:=updateScript +'/bin/ls -l ' +homeDir + '.config/plasma-workspace/shutdown/ > '; 390 | updateScript:=updateScript +homeDir + '.startup-watcher/up24 2>> '+homeDir +'.startup-watcher/up24 &'; 391 | 392 | //25 Xsession User cat ~/.xsession 393 | updateScript:=updateScript +'/bin/cat ' +homeDir + '.xsession > '; 394 | updateScript:=updateScript +homeDir + '.startup-watcher/up25 2>> '+homeDir +'.startup-watcher/up25 &'; 395 | 396 | //26 Xprofile User cat ~/.xprofile 397 | updateScript:=updateScript +'/bin/cat ' +homeDir + '.xprofile > '; 398 | updateScript:=updateScript +homeDir + '.startup-watcher/up26 2>> '+homeDir +'.startup-watcher/up26 &'; 399 | 400 | //27 Autostart-sh User ls -l ~/.config/autostart-scripts/ 401 | updateScript:=updateScript +'/bin/ls -l ' +homeDir + '.config/autostart-scripts/ > '; 402 | updateScript:=updateScript +homeDir + '.startup-watcher/up27 2>> '+homeDir +'.startup-watcher/up27 &'; 403 | 404 | //28 Autostart User ls -l ~/.config/autostart/ 405 | updateScript:=updateScript +'/bin/ls -l ' + homeDir + '.config/autostart/ > '; 406 | updateScript:=updateScript +homeDir + '.startup-watcher/up28 2>> '+homeDir +'.startup-watcher/up28 &'; 407 | 408 | //29 Fluxbox-Startup x User not yet implemented (~/.fluxbox/startup) 409 | //updateScript:=updateScript +' > '; 410 | //updateScript:=updateScript +homeDir + '.startup-watcher/up29 2>> '+homeDir +'.startup-watcher/up29 &'; 411 | tab29:='Inactive/disabled'; 412 | 413 | //30 Aws-Autorun.sh x User not yet implemented (~/.config/awesome/autorun.sh) 414 | //updateScript:=updateScript +' > '; 415 | //updateScript:=updateScript +homeDir + '.startup-watcher/up30 2>> '+homeDir +'.startup-watcher/up30 &'; 416 | tab30:='Inactive/disabled'; 417 | 418 | //31 Wine x User not yet implemented (~/.wine/...) 419 | //updateScript:=updateScript +' > '; 420 | //updateScript:=updateScript +homeDir + '.startup-watcher/up31 2>> '+homeDir +'.startup-watcher/up31 &'; 421 | tab31:='Inactive/disabled'; 422 | 423 | // ----------------------------------------------------------------------------------- 424 | // Initialize move script variable (history) 425 | 426 | moveScript:=''; 427 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up0 ' +homeDir + '.startup-watcher/prev0;'; 428 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up1 ' +homeDir + '.startup-watcher/prev1;'; //Disabled/inactive 429 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up2 ' +homeDir + '.startup-watcher/prev2;'; 430 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up3 ' +homeDir + '.startup-watcher/prev3;'; 431 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up4 ' +homeDir + '.startup-watcher/prev4;'; 432 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up5 ' +homeDir + '.startup-watcher/prev5;'; 433 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up6 ' +homeDir + '.startup-watcher/prev6;'; 434 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up7 ' +homeDir + '.startup-watcher/prev7;'; 435 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up8 ' +homeDir + '.startup-watcher/prev8;'; 436 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up9 ' +homeDir + '.startup-watcher/prev9;'; 437 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up10 ' +homeDir + '.startup-watcher/prev10;'; 438 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up11 ' +homeDir + '.startup-watcher/prev11;'; 439 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up12 ' +homeDir + '.startup-watcher/prev12;'; 440 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up13 ' +homeDir + '.startup-watcher/prev13;'; 441 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up14 ' +homeDir + '.startup-watcher/prev14;'; 442 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up15 ' +homeDir + '.startup-watcher/prev15;'; 443 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up16 ' +homeDir + '.startup-watcher/prev16;'; 444 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up17 ' +homeDir + '.startup-watcher/prev17;'; 445 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up18 ' +homeDir + '.startup-watcher/prev18;'; //Disabled/inactive 446 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up19 ' +homeDir + '.startup-watcher/prev19;'; 447 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up20 ' +homeDir + '.startup-watcher/prev20;'; 448 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up21 ' +homeDir + '.startup-watcher/prev21;'; //Disabled/inactive 449 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up22 ' +homeDir + '.startup-watcher/prev22;'; 450 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up23 ' +homeDir + '.startup-watcher/prev23;'; 451 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up24 ' +homeDir + '.startup-watcher/prev24;'; 452 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up25 ' +homeDir + '.startup-watcher/prev25;'; 453 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up26 ' +homeDir + '.startup-watcher/prev26;'; 454 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up27 ' +homeDir + '.startup-watcher/prev27;'; 455 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up28 ' +homeDir + '.startup-watcher/prev28;'; 456 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up29 ' +homeDir + '.startup-watcher/prev29;'; //Disabled/inactive 457 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up30 ' +homeDir + '.startup-watcher/prev30;'; //Disabled/inactive 458 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up31 ' +homeDir + '.startup-watcher/prev31;'; //Disabled/inactive 459 | 460 | // ----------------------------------------------------------------------------------- 461 | // Initialize diff compare script variable (catch changes) 462 | 463 | diffCompare:=''; 464 | //diff <(/bin/cat old) <(/bin/cat new) 465 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev0 | /bin/grep -v NetworkManager.service | /bin/grep -v networkmanager.service) <(/bin/cat ' +homeDir + '.startup-watcher/up0 | /bin/grep -v NetworkManager.service | /bin/grep -v networkmanager.service) > ' +homeDir + '.startup-watcher/diff0;'; 466 | //diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev1) <(/bin/cat ' +homeDir + '.startup-watcher/up1) > ' +homeDir + '.startup-watcher/diff1;'; //Disabled/inactive 467 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev2) <(/bin/cat ' +homeDir + '.startup-watcher/up2) > ' +homeDir + '.startup-watcher/diff2;'; 468 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev3) <(/bin/cat ' +homeDir + '.startup-watcher/up3) > ' +homeDir + '.startup-watcher/diff3;'; 469 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev4) <(/bin/cat ' +homeDir + '.startup-watcher/up4) > ' +homeDir + '.startup-watcher/diff4;'; 470 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev5) <(/bin/cat ' +homeDir + '.startup-watcher/up5) > ' +homeDir + '.startup-watcher/diff5;'; 471 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev6) <(/bin/cat ' +homeDir + '.startup-watcher/up6) > ' +homeDir + '.startup-watcher/diff6;'; 472 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev7) <(/bin/cat ' +homeDir + '.startup-watcher/up7) > ' +homeDir + '.startup-watcher/diff7;'; 473 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev8) <(/bin/cat ' +homeDir + '.startup-watcher/up8) > ' +homeDir + '.startup-watcher/diff8;'; 474 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev9) <(/bin/cat ' +homeDir + '.startup-watcher/up9) > ' +homeDir + '.startup-watcher/diff9;'; 475 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev10) <(/bin/cat ' +homeDir + '.startup-watcher/up10) > ' +homeDir + '.startup-watcher/diff10;'; 476 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev11) <(/bin/cat ' +homeDir + '.startup-watcher/up11) > ' +homeDir + '.startup-watcher/diff11;'; 477 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev12) <(/bin/cat ' +homeDir + '.startup-watcher/up12) > ' +homeDir + '.startup-watcher/diff12;'; 478 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev13) <(/bin/cat ' +homeDir + '.startup-watcher/up13) > ' +homeDir + '.startup-watcher/diff13;'; 479 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev14) <(/bin/cat ' +homeDir + '.startup-watcher/up14) > ' +homeDir + '.startup-watcher/diff14;'; 480 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev15) <(/bin/cat ' +homeDir + '.startup-watcher/up15) > ' +homeDir + '.startup-watcher/diff15;'; 481 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev16) <(/bin/cat ' +homeDir + '.startup-watcher/up16) > ' +homeDir + '.startup-watcher/diff16;'; 482 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev17) <(/bin/cat ' +homeDir + '.startup-watcher/up17) > ' +homeDir + '.startup-watcher/diff17;'; 483 | //diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev18) <(/bin/cat ' +homeDir + '.startup-watcher/up18) > ' +homeDir + '.startup-watcher/diff18;'; //Disabled/inactive 484 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev19) <(/bin/cat ' +homeDir + '.startup-watcher/up19) > ' +homeDir + '.startup-watcher/diff19;'; 485 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev20) <(/bin/cat ' +homeDir + '.startup-watcher/up20) > ' +homeDir + '.startup-watcher/diff20;'; 486 | //diffCompare:=diffCompare + + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev21) <(/bin/cat ' +homeDir + '.startup-watcher/up21) > ' +homeDir + '.startup-watcher/diff21;'; //Disabled/inactive 487 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev22) <(/bin/cat ' +homeDir + '.startup-watcher/up22) > ' +homeDir + '.startup-watcher/diff22;'; 488 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev23) <(/bin/cat ' +homeDir + '.startup-watcher/up23) > ' +homeDir + '.startup-watcher/diff23;'; 489 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev24) <(/bin/cat ' +homeDir + '.startup-watcher/up24) > ' +homeDir + '.startup-watcher/diff24;'; 490 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev25) <(/bin/cat ' +homeDir + '.startup-watcher/up25) > ' +homeDir + '.startup-watcher/diff25;'; 491 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev26) <(/bin/cat ' +homeDir + '.startup-watcher/up26) > ' +homeDir + '.startup-watcher/diff26;'; 492 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev27) <(/bin/cat ' +homeDir + '.startup-watcher/up27) > ' +homeDir + '.startup-watcher/diff27;'; 493 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev28) <(/bin/cat ' +homeDir + '.startup-watcher/up28) > ' +homeDir + '.startup-watcher/diff28;'; 494 | //diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev29) <(/bin/cat ' +homeDir + '.startup-watcher/up29) > ' +homeDir + '.startup-watcher/diff29;'; //Disabled/inactive 495 | //diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev30) <(/bin/cat ' +homeDir + '.startup-watcher/up30) > ' +homeDir + '.startup-watcher/diff30;'; //Disabled/inactive 496 | //diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev31) <(/bin/cat ' +homeDir + '.startup-watcher/up31) > ' +homeDir + '.startup-watcher/diff31;'; //Disabled/inactive 497 | 498 | // ----------------------------------------------------------------------------------- 499 | // Backup old files (last run) 500 | 501 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "/bin/cp -f ' + homeDir + '.startup-watcher/dif* ' + homeDir + '.startup-watcher/backup/"', []); 502 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "/bin/cp -f ' + homeDir + '.startup-watcher/up* ' + homeDir + '.startup-watcher/backup/"', []); 503 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "/bin/cp -f ' + homeDir + '.startup-watcher/prev* ' + homeDir + '.startup-watcher/backup/"', []); 504 | 505 | // ----------------------------------------------------------------------------------- 506 | // Archive old scan and perform a new one 507 | 508 | if (FileExists(homeDir + '/.startup-watcher/up0') and FileExists(homeDir + '.startup-watcher/up2')) then 509 | begin 510 | Writeln ('Startup-watcher: archiving previous scan from ' +homeDir + '.startup-watcher/*'); 511 | Timer1.OnTimer(Self); 512 | end else 513 | begin 514 | Writeln ('Startup-watcher: unable to find previous scan on ' +homeDir + '.startup-watcher/*, running new scan'); 515 | //Showmessage(updateScript); 516 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "' + updateScript + '"', []); 517 | Timer2.Enabled:=True; 518 | end; 519 | 520 | end; 521 | 522 | procedure TForm1.Timer2Timer(Sender: TObject); 523 | begin 524 | //Timer2: 8 sec: disabled by default: wait for update (scan) to occur then move (backup), only used when there is no update (scan) 525 | //Showmessage(moveScript); 526 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "' + moveScript + '"', []); 527 | Timer2.Enabled:=False; 528 | Timer1.Enabled:=True; 529 | end; 530 | 531 | procedure TForm1.Timer1Timer(Sender: TObject); 532 | begin 533 | //Timer1: 600 sec: enabled by default: move (backup), update (scan), run timer3 534 | Label1.Caption:='Startup Watcher - Scanning...'; 535 | Writeln ('Startup-watcher: scanning start up locations for changes ' +homeDir + '.startup-watcher/*'); 536 | if (changesDetected = False) then //run new scan only if no changes detected lastly to avoid undetected multiple changes 537 | begin 538 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "' + moveScript + '"', []); 539 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "' + updateScript + '"', []); 540 | end; 541 | Timer3.Enabled:=true; 542 | end; 543 | 544 | procedure TForm1.Timer3Timer(Sender: TObject); 545 | //Timer3: 8 sec: disaled by default: compare (diffCompare) data after update (scan) and move (backup) 546 | var i: Integer; 547 | var fileNameDiff, fileNameUp, fileNamePrev : String; 548 | begin 549 | //Showmessage(diffCompare); 550 | //Diff compare only if no change detected lastly 551 | if (changesDetected = False) then SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "' + diffCompare + '"', []); 552 | memo3.Text:=''; 553 | 554 | if (changesDetected = False) then 555 | begin 556 | i := 0; 557 | end else begin 558 | i := changesDetectedIndex + 1; 559 | end; 560 | 561 | while i < 32 do 562 | begin 563 | if FileExists(homeDir + '.startup-watcher/diff' + inttostr(i)) then memo3.Lines.LoadFromFile(homeDir + '.startup-watcher/diff' + inttostr(i)); 564 | 565 | //File '.startup-watcher/diffxx' always exist but it is empty when no change are detected 566 | if memo3.Text <> '' then 567 | begin 568 | //Disable watcher (main timer) on changes detection to avoid missing multiple changes or catching changes when user not present 569 | Timer1.Enabled:=false; 570 | MenuItem10.Caption:='Enable Watcher'; 571 | 572 | //Set changesDetected to true to avoid new scan, and avoid undetected changes 573 | changesDetected:=true; 574 | changesDetectedIndex:=i; 575 | 576 | //Prepare to save changes 577 | fileNameDiff:=inttostr(i) + '-Diff-' + DateToStr(Now) + '-' + TimeToStr(Now); 578 | fileNameUp:=inttostr(i) + '-New-' + DateToStr(Now) + '-' + TimeToStr(Now); 579 | fileNamePrev:=inttostr(i) + '-Prev-' + DateToStr(Now) + '-' + TimeToStr(Now); 580 | 581 | //Save changes 582 | if FileExists(homeDir + '.startup-watcher/diff' + inttostr(i)) then 583 | CopyFile(homeDir + '.startup-watcher/diff' + inttostr(i) , homeDir + '.startup-watcher/changes/' + fileNameDiff, true); 584 | if FileExists(homeDir + '.startup-watcher/prev' + inttostr(i)) then 585 | CopyFile(homeDir + '.startup-watcher/prev' + inttostr(i) , homeDir + '.startup-watcher/changes/' + fileNamePrev, true); 586 | if FileExists(homeDir + '.startup-watcher/up' + inttostr(i)) then 587 | CopyFile(homeDir + '.startup-watcher/up' + inttostr(i) , homeDir + '.startup-watcher/changes/' + fileNameUp, true); 588 | 589 | //Alert user for changes 590 | Form2.Visible:=true; 591 | Form2.BringToFront; 592 | Form2.Position:=poDesktopCenter; 593 | 594 | //Position form1 to changed section 595 | tabcontrol1.TabIndex:=i; 596 | Form1.TabControl1Change(self); 597 | //Edit1.Text:=Edit1.Text + ' | Changes saved to: ' + homeDir + '.startup-watcher/changes/'; 598 | 599 | //Cancel this loop to avoid missing multiple change at once 600 | i:=1000; 601 | end else 602 | begin 603 | changesDetected:=false; 604 | changesDetectedIndex:=0; 605 | memo3.Text:=''; 606 | i := i + 1; 607 | end; 608 | end; 609 | 610 | //if no change detected then loop main timer 611 | if (changesDetected = false) then timer1.Enabled:=true; 612 | 613 | //Disable this timer on exit to avoid loop 614 | Timer3.Enabled:=False; 615 | 616 | //Reset scanning indicator 617 | Label1.Caption:='Startup Watcher - Startup Items'; 618 | end; 619 | 620 | procedure TForm1.FormActivate(Sender: TObject); 621 | begin 622 | Form1.TabControl1Change(self); 623 | end; 624 | 625 | procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean); 626 | begin 627 | CanClose:=false; 628 | form1.Visible:=false; 629 | TrayIcon1.Visible:=true; 630 | form1.FormStyle:=fsNormal; //fsNormal; //fsSystemStayOnTop 631 | end; 632 | 633 | procedure TForm1.Button4Click(Sender: TObject); 634 | begin 635 | button1.Click; 636 | end; 637 | 638 | procedure TForm1.Button5Click(Sender: TObject); 639 | begin 640 | Form1.Visible:=false; 641 | TrayIcon1.Visible:=true; 642 | form1.FormStyle:=fsNormal; //fsNormal; //fsSystemStayOnTop 643 | end; 644 | 645 | procedure TForm1.Button6Click(Sender: TObject); 646 | begin 647 | Application.Terminate; 648 | end; 649 | 650 | procedure TForm1.Button1Click(Sender: TObject); 651 | begin 652 | Timer1.OnTimer(Self); 653 | end; 654 | 655 | procedure TForm1.Button3Click(Sender: TObject); 656 | begin 657 | //Changed to reload just instead of refresh just to reload current tab... 658 | //button1.click; 659 | Form1.TabControl1Change(self); 660 | end; 661 | 662 | procedure TForm1.MenuItem10Click(Sender: TObject); 663 | begin 664 | if MenuItem10.Caption = 'Enable Watcher' then 665 | begin 666 | MenuItem10.Caption:='Disable Watcher'; 667 | Timer1.Enabled:=true; 668 | form1.FormStyle:=fsNormal; //FormStyle:=fsSystemStayOnTop; 669 | Showmessage('Startup Watcher: active scan enabled'); 670 | end 671 | else 672 | begin 673 | MenuItem10.Caption:='Enable Watcher'; 674 | Timer1.Enabled:=false; 675 | form1.FormStyle:=fsNormal; //FormStyle:=fsSystemStayOnTop; 676 | Showmessage('Startup Watcher: active scan disabled'); 677 | end; 678 | end; 679 | 680 | procedure TForm1.MenuItem12Click(Sender: TObject); 681 | begin 682 | form1.FormStyle:=fsNormal; //FormStyle:=fsSystemStayOnTop; 683 | showmessage('Startup-Watcher v1.8 - for more information visit https://github.com/Intika-Linux-Apps/Startup-Watcher'); 684 | end; 685 | 686 | procedure TForm1.MenuItem13Click(Sender: TObject); 687 | begin 688 | Button1.Click; 689 | end; 690 | 691 | procedure TForm1.MenuItem14Click(Sender: TObject); 692 | begin 693 | button6.click; 694 | end; 695 | 696 | procedure TForm1.MenuItem15Click(Sender: TObject); 697 | begin 698 | button5.Click; 699 | end; 700 | 701 | procedure TForm1.MenuItem16Click(Sender: TObject); 702 | begin 703 | TrayIcon1.Visible:=false; 704 | end; 705 | 706 | procedure TForm1.MenuItem1Click(Sender: TObject); 707 | begin 708 | Form1.Visible:=true; 709 | end; 710 | 711 | procedure TForm1.MenuItem2Click(Sender: TObject); 712 | begin 713 | TrayIcon1.Visible:=false; 714 | Form1.Visible:=true; 715 | end; 716 | 717 | procedure TForm1.MenuItem3Click(Sender: TObject); 718 | begin 719 | Application.Terminate; 720 | end; 721 | 722 | procedure TForm1.MenuItem4Click(Sender: TObject); 723 | begin 724 | Form1.Visible:=false; 725 | TrayIcon1.Visible:=true; 726 | form1.FormStyle:=fsNormal; //fsNormal; //fsSystemStayOnTop 727 | end; 728 | 729 | procedure TForm1.MenuItem5Click(Sender: TObject); 730 | begin 731 | Button1.Click; 732 | end; 733 | 734 | procedure TForm1.TrayIcon1Click(Sender: TObject); 735 | begin 736 | if form1.Visible then 737 | form1.Visible:=false 738 | else 739 | form1.Visible:=true; 740 | end; 741 | 742 | procedure TForm1.TabControl1Change(Sender: TObject); 743 | begin 744 | 745 | if tabcontrol1.TabIndex < 9 then edit1.Caption:='| Tab: 0' else edit1.Caption:='| Tab: '; 746 | edit1.Caption:=edit1.Caption+inttostr(tabcontrol1.TabIndex + 1); 747 | edit1.Caption:=edit1.Caption+' | Location/commands: '; 748 | 749 | //0 Systemd-Services Root systemctl list-unit-files; systemctl -l --type service --all 750 | if tabcontrol1.TabIndex=0 then 751 | begin 752 | edit1.Caption:=edit1.Caption+'systemctl list-unit-files; systemctl -l --type service --all'; 753 | if FileExists(homeDir + '.startup-watcher/up0') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up0') else memo1.text:=tab0; 754 | if FileExists(homeDir + '.startup-watcher/diff0') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff0') else memo2.text:=dif0; 755 | end; 756 | 757 | //1 Systemd-Timers x Root already watched in services (systemctl list-timers --all) 758 | if tabcontrol1.TabIndex=1 then 759 | begin 760 | edit1.Caption:=edit1.Caption+'already watched in services (systemctl list-timers --all)'; 761 | memo1.text:='Inactive/disabled'; 762 | memo2.text:='Inactive/disabled'; 763 | end; 764 | 765 | //2 Systemd-Init.d Root ls -l /etc/init.d/ 766 | if tabcontrol1.TabIndex=2 then 767 | begin 768 | edit1.Caption:=edit1.Caption+'ls -l /etc/init.d/'; 769 | if FileExists(homeDir + '.startup-watcher/up2') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up2') else memo1.text:=tab2; 770 | if FileExists(homeDir + '.startup-watcher/diff2') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff2') else memo2.text:=dif2; 771 | end; 772 | 773 | //3 Cron-Scheduler Root ls -l /etc/cron*; cat /var/spool/cron/* 774 | if tabcontrol1.TabIndex=3 then 775 | begin 776 | edit1.Caption:=edit1.Caption+'ls -l /etc/cron*; cat /var/spool/cron/*'; 777 | if FileExists(homeDir + '.startup-watcher/up3') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up3') else memo1.text:=tab3; 778 | if FileExists(homeDir + '.startup-watcher/diff3') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff3') else memo2.text:=dif3; 779 | end; 780 | 781 | //4 DBus-Services Root ls -l /usr/share/dbus-1/services/ 782 | if tabcontrol1.TabIndex=4 then 783 | begin 784 | edit1.Caption:=edit1.Caption+'ls -l /usr/share/dbus-1/services/'; 785 | if FileExists(homeDir + '.startup-watcher/up4') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up4') else memo1.text:=tab4; 786 | if FileExists(homeDir + '.startup-watcher/diff4') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff4') else memo2.text:=dif4; 787 | end; 788 | 789 | //5 XDG-Autostart Root ls -l /etc/xdg/autostart/ 790 | if tabcontrol1.TabIndex=5 then 791 | begin 792 | edit1.Caption:=edit1.Caption+'ls -l /etc/xdg/autostart/'; 793 | if FileExists(homeDir + '.startup-watcher/up5') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up5') else memo1.text:=tab5; 794 | if FileExists(homeDir + '.startup-watcher/diff5') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff5') else memo2.text:=dif5; 795 | end; 796 | 797 | //6 XDG-Openbox Root ls -l /etc/xdg/openbox/; cat /etc/xdg/openbox/* 798 | if tabcontrol1.TabIndex=6 then 799 | begin 800 | edit1.Caption:=edit1.Caption+'ls -l /etc/xdg/openbox/; cat /etc/xdg/openbox/* '; 801 | if FileExists(homeDir + '.startup-watcher/up6') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up6') else memo1.text:=tab6; 802 | if FileExists(homeDir + '.startup-watcher/diff6') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff6') else memo2.text:=dif6; 803 | end; 804 | 805 | //7 X11-Xinitrc Root cat /etc/X11/xinit/xinitrc 806 | if tabcontrol1.TabIndex=7 then 807 | begin 808 | edit1.Caption:=edit1.Caption+'cat /etc/X11/xinit/xinitrc '; 809 | if FileExists(homeDir + '.startup-watcher/up7') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up7') else memo1.text:=tab7; 810 | if FileExists(homeDir + '.startup-watcher/diff7') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff7') else memo2.text:=dif7; 811 | end; 812 | 813 | //8 Udev-Rules Root ls -l /udev/rules.d/; cat /udev/rules.d/* 814 | if tabcontrol1.TabIndex=8 then 815 | begin 816 | edit1.Caption:=edit1.Caption+'ls -l /udev/rules.d/; cat /udev/rules.d/* '; 817 | if FileExists(homeDir + '.startup-watcher/up8') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up8') else memo1.text:=tab8; 818 | if FileExists(homeDir + '.startup-watcher/diff8') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff8') else memo2.text:=dif8; 819 | end; 820 | 821 | //9 ETC-Profile.d Root ls -l /etc/profile.d/; cat /etc/profile.d/* (started with shell) 822 | if tabcontrol1.TabIndex=9 then 823 | begin 824 | edit1.Caption:=edit1.Caption+'cat /etc/profile.d (started with shell)'; 825 | if FileExists(homeDir + '.startup-watcher/up9') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up9') else memo1.text:=tab9; 826 | if FileExists(homeDir + '.startup-watcher/diff9') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff9') else memo2.text:=dif9; 827 | end; 828 | 829 | //10 ETC-Profile Root cat /etc/profile 830 | if tabcontrol1.TabIndex=10 then 831 | begin 832 | edit1.Caption:=edit1.Caption+'cat /etc/profile'; 833 | if FileExists(homeDir + '.startup-watcher/up10') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up10') else memo1.text:=tab10; 834 | if FileExists(homeDir + '.startup-watcher/diff10') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff10') else memo2.text:=dif10; 835 | end; 836 | 837 | //11 RC.D-RC.Local Root cat /etc/rc.d/rc.local 838 | if tabcontrol1.TabIndex=11 then 839 | begin 840 | edit1.Caption:=edit1.Caption+'cat /etc/rc.d/rc.local'; 841 | if FileExists(homeDir + '.startup-watcher/up11') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up11') else memo1.text:=tab11; 842 | if FileExists(homeDir + '.startup-watcher/diff11') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff11') else memo2.text:=dif11; 843 | end; 844 | 845 | //12 RC.Local Root cat /etc/rc.local 846 | if tabcontrol1.TabIndex=12 then 847 | begin 848 | edit1.Caption:=edit1.Caption+'cat /etc/rc.local'; 849 | if FileExists(homeDir + '.startup-watcher/up12') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up12') else memo1.text:=tab12; 850 | if FileExists(homeDir + '.startup-watcher/diff12') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff12') else memo2.text:=dif12; 851 | end; 852 | 853 | //13 Xsession-LightDM Root cat /etc/lightdm/Xsession 854 | if tabcontrol1.TabIndex=13 then 855 | begin 856 | edit1.Caption:=edit1.Caption+'cat /etc/lightdm/Xsession'; 857 | if FileExists(homeDir + '.startup-watcher/up13') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up13') else memo1.text:=tab13; 858 | if FileExists(homeDir + '.startup-watcher/diff13') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff13') else memo2.text:=dif13; 859 | end; 860 | 861 | //14 Xsession-LXDM Root cat /etc/lxdm/Xsession 862 | if tabcontrol1.TabIndex=14 then 863 | begin 864 | edit1.Caption:=edit1.Caption+'cat /etc/lxdm/Xsession'; 865 | if FileExists(homeDir + '.startup-watcher/up14') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up14') else memo1.text:=tab14; 866 | if FileExists(homeDir + '.startup-watcher/diff14') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff14') else memo2.text:=dif14; 867 | end; 868 | 869 | //15 Xsession-SDDM Root cat /usr/share/sddm/scripts/Xsession 870 | if tabcontrol1.TabIndex=15 then 871 | begin 872 | edit1.Caption:=edit1.Caption+'cat /usr/share/sddm/scripts/Xsession'; 873 | if FileExists(homeDir + '.startup-watcher/up15') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up15') else memo1.text:=tab15; 874 | if FileExists(homeDir + '.startup-watcher/diff15') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff15') else memo2.text:=dif15; 875 | end; 876 | 877 | //16 Xsession-GDM Root cat /etc/gdm/Xsession 878 | if tabcontrol1.TabIndex=16 then 879 | begin 880 | edit1.Caption:=edit1.Caption+'cat /etc/gdm/Xsession'; 881 | if FileExists(homeDir + '.startup-watcher/up16') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up16') else memo1.text:=tab16; 882 | if FileExists(homeDir + '.startup-watcher/diff16') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff16') else memo2.text:=dif16; 883 | end; 884 | 885 | //17 Systemd-Services User systemctl list-unit-files --user 886 | if tabcontrol1.TabIndex=17 then 887 | begin 888 | edit1.Caption:=edit1.Caption+'systemctl list-unit-files --user'; 889 | if FileExists(homeDir + '.startup-watcher/up17') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up17') else memo1.text:=tab17; 890 | if FileExists(homeDir + '.startup-watcher/diff17') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff17') else memo2.text:=dif17; 891 | end; 892 | 893 | //18 Systemd-Timers x User already watched in services (systemctl list-timers --all --user) 894 | if tabcontrol1.TabIndex=18 then 895 | begin 896 | edit1.Caption:=edit1.Caption+'already watched in services (systemctl list-timers --all --user)'; 897 | memo1.text:='Inactive/disabled'; 898 | memo2.text:='Inactive/disabled'; 899 | end; 900 | 901 | //19 Cron-Scheduler User crontab -l 902 | if tabcontrol1.TabIndex=19 then 903 | begin 904 | edit1.Caption:=edit1.Caption+'crontab -l'; 905 | if FileExists(homeDir + '.startup-watcher/up19') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up19') else memo1.text:=tab19; 906 | if FileExists(homeDir + '.startup-watcher/diff19') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff19') else memo2.text:=dif19; 907 | end; 908 | 909 | //20 XDG-Openbox User ls -l ~/.config/openbox/; cat ~/.config/openbox/* 910 | if tabcontrol1.TabIndex=20 then 911 | begin 912 | edit1.Caption:=edit1.Caption+'ls -l ~/.config/openbox/; cat ~/.config/openbox/* (environment & autostart)'; 913 | if FileExists(homeDir + '.startup-watcher/up20') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up20') else memo1.text:=tab20; 914 | if FileExists(homeDir + '.startup-watcher/diff20') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff20') else memo2.text:=dif20; 915 | end; 916 | 917 | //21 X11-Xinitrc x User not yet implemented (~/.xinitrc) 918 | if tabcontrol1.TabIndex=21 then 919 | begin 920 | //TODO 921 | edit1.Caption:=edit1.Caption+'not yet implemented (~/.xinitrc)'; 922 | memo1.text:='Inactive/disabled'; 923 | memo2.text:='Inactive/disabled'; 924 | end; 925 | 926 | //22 KDE-Environment User ls -l ~/.config/plasma-workspace/env/ 927 | if tabcontrol1.TabIndex=22 then 928 | begin 929 | edit1.Caption:=edit1.Caption+'ls -l ~/.config/plasma-workspace/env/'; 930 | if FileExists(homeDir + '.startup-watcher/up22') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up22') else memo1.text:=tab22; 931 | if FileExists(homeDir + '.startup-watcher/diff22') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff22') else memo2.text:=dif22; 932 | end; 933 | 934 | //23 KDE-Autostart User ls -l ~/.kde/Autostart/ 935 | if tabcontrol1.TabIndex=23 then 936 | begin 937 | edit1.Caption:=edit1.Caption+'ls -l ~/.kde/Autostart/'; 938 | if FileExists(homeDir + '.startup-watcher/up23') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up23') else memo1.text:=tab23; 939 | if FileExists(homeDir + '.startup-watcher/diff23') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff23') else memo2.text:=dif23; 940 | end; 941 | 942 | //24 KDE-Shutdown User ls -l ~/.config/plasma-workspace/shutdown/ 943 | if tabcontrol1.TabIndex=24 then 944 | begin 945 | edit1.Caption:=edit1.Caption+'ls -l ~/.config/plasma-workspace/shutdown/'; 946 | if FileExists(homeDir + '.startup-watcher/up24') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up24') else memo1.text:=tab24; 947 | if FileExists(homeDir + '.startup-watcher/diff24') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff24') else memo2.text:=dif24; 948 | end; 949 | 950 | //25 Xsession User cat ~/.xsession 951 | if tabcontrol1.TabIndex=25 then 952 | begin 953 | edit1.Caption:=edit1.Caption+'cat ~/.xsession'; 954 | if FileExists(homeDir + '.startup-watcher/up25') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up25') else memo1.text:=tab25; 955 | if FileExists(homeDir + '.startup-watcher/diff25') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff25') else memo2.text:=dif25; 956 | end; 957 | 958 | //26 Xprofile User cat ~/.xprofile 959 | if tabcontrol1.TabIndex=26 then 960 | begin 961 | edit1.Caption:=edit1.Caption+'cat ~/.xprofile'; 962 | if FileExists(homeDir + '.startup-watcher/up26') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up26') else memo1.text:=tab26; 963 | if FileExists(homeDir + '.startup-watcher/diff26') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff26') else memo2.text:=dif26; 964 | end; 965 | 966 | //27 Autostart-sh User ls -l ~/.config/autostart-scripts/ 967 | if tabcontrol1.TabIndex=27 then 968 | begin 969 | edit1.Caption:=edit1.Caption+'ls -l ~/.config/autostart-scripts/'; 970 | if FileExists(homeDir + '.startup-watcher/up27') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up27') else memo1.text:=tab27; 971 | if FileExists(homeDir + '.startup-watcher/diff27') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff27') else memo2.text:=dif27; 972 | end; 973 | 974 | //28 Autostart User ls -l ~/.config/autostart/ 975 | if tabcontrol1.TabIndex=28 then 976 | begin 977 | edit1.Caption:=edit1.Caption+'ls -l ~/.config/autostart/'; 978 | if FileExists(homeDir + '.startup-watcher/up28') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up28') else memo1.text:=tab28; 979 | if FileExists(homeDir + '.startup-watcher/diff28') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff28') else memo2.text:=dif28; 980 | end; 981 | 982 | //29 Fluxbox-Startup x User not yet implemented (~/.fluxbox/startup) 983 | if tabcontrol1.TabIndex=29 then 984 | begin 985 | //TODO 986 | edit1.Caption:=edit1.Caption+'not yet implemented (~/.fluxbox/startup)'; 987 | memo1.text:='Inactive/disabled'; 988 | memo2.text:='Inactive/disabled'; 989 | end; 990 | 991 | //30 Aws-Autorun.sh x User not yet implemented (~/.config/awesome/autorun.sh) 992 | if tabcontrol1.TabIndex=30 then 993 | begin 994 | //TODO 995 | edit1.Caption:=edit1.Caption+'not yet implemented (~/.config/awesome/autorun.sh)'; 996 | memo1.text:='Inactive/disabled'; 997 | memo2.text:='Inactive/disabled'; 998 | end; 999 | 1000 | //31 Wine x User not yet implemented (~/.wine/...) 1001 | if tabcontrol1.TabIndex=31 then 1002 | begin 1003 | //TODO 1004 | edit1.Caption:=edit1.Caption+'not yet implemented (~/.wine/...)'; 1005 | memo1.text:='Inactive/disabled'; 1006 | memo2.text:='Inactive/disabled'; 1007 | end; 1008 | 1009 | end; 1010 | 1011 | end. 1012 | 1013 | -------------------------------------------------------------------------------- /unit2.lfm: -------------------------------------------------------------------------------- 1 | object Form2: TForm2 2 | Left = 326 3 | Height = 92 4 | Top = 291 5 | Width = 448 6 | Caption = 'Startup-Watcher Notification' 7 | ClientHeight = 92 8 | ClientWidth = 448 9 | FormStyle = fsSystemStayOnTop 10 | Position = poDesktopCenter 11 | LCLVersion = '1.2.4.0' 12 | object Label1: TLabel 13 | Left = 24 14 | Height = 15 15 | Top = 16 16 | Width = 398 17 | Caption = 'Startup-Watcher Scanner: changes detected, watcher disabled' 18 | ParentColor = False 19 | end 20 | object Button1: TButton 21 | Left = 80 22 | Height = 25 23 | Top = 48 24 | Width = 292 25 | Caption = 'Show details and re-enable watcher' 26 | Default = True 27 | OnClick = Button1Click 28 | TabOrder = 0 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /unit2.pas: -------------------------------------------------------------------------------- 1 | unit Unit2; 2 | 3 | {$mode objfpc}{$H+} 4 | 5 | interface 6 | 7 | uses 8 | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; 9 | 10 | type 11 | 12 | { TForm2 } 13 | 14 | TForm2 = class(TForm) 15 | Button1: TButton; 16 | Label1: TLabel; 17 | procedure Button1Click(Sender: TObject); 18 | private 19 | { private declarations } 20 | public 21 | { public declarations } 22 | end; 23 | 24 | var 25 | Form2: TForm2; 26 | 27 | implementation 28 | uses 29 | Unit1; 30 | 31 | {$R *.lfm} 32 | 33 | { TForm2 } 34 | 35 | procedure TForm2.Button1Click(Sender: TObject); 36 | begin 37 | Form2.Visible:=false; 38 | Form1.Visible:=true; 39 | Form1.BringToFront; 40 | Form1.FormStyle:=fsSystemStayOnTop; //FormStyle:=fsNormal; 41 | Form1.WindowState:=wsMaximized; 42 | Form1.Position:=poDesktopCenter; 43 | //Enable back the watcher 44 | Form1.MenuItem10.Caption:='Disable Watcher'; 45 | Form1.Timer1.Interval:=600000; 46 | Form1.Timer1.Enabled:=true; 47 | end; 48 | 49 | end. 50 | 51 | --------------------------------------------------------------------------------