From f0692d181642db953ebf09bc9a5700ec4b288f2e Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Sat, 31 May 2025 22:11:31 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20Improved=20installer=20script=20?= =?UTF-8?q?('installer.sh')?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../database/myp.db.backup_20250529_150542 | Bin 69632 -> 0 bytes .../database/myp.db.backup_20250529_182203 | Bin 126976 -> 0 bytes .../database/myp.db.backup_20250529_183135 | Bin 126976 -> 0 bytes .../database/myp.db.backup_20250529_184851 | Bin 77824 -> 0 bytes .../database/myp.db.backup_20250529_185343 | Bin 106496 -> 0 bytes .../database/myp.db.backup_20250529_185834 | Bin 106496 -> 0 bytes .../database/myp.db.backup_20250529_230231 | Bin 106496 -> 0 bytes .../database/myp.db.backup_20250529_230235 | Bin 106496 -> 0 bytes .../database/myp.db.backup_20250529_231800 | Bin 106496 -> 0 bytes .../myp.db.backup_immediate_20250529_150732 | Bin 106496 -> 0 bytes .../myp.db.emergency_backup_20250529_185111 | Bin 4096 -> 0 bytes backend/app/installer.sh | 388 +++++++++++++++--- 12 files changed, 327 insertions(+), 61 deletions(-) delete mode 100644 backend/app/database/myp.db.backup_20250529_150542 delete mode 100644 backend/app/database/myp.db.backup_20250529_182203 delete mode 100644 backend/app/database/myp.db.backup_20250529_183135 delete mode 100644 backend/app/database/myp.db.backup_20250529_184851 delete mode 100644 backend/app/database/myp.db.backup_20250529_185343 delete mode 100644 backend/app/database/myp.db.backup_20250529_185834 delete mode 100644 backend/app/database/myp.db.backup_20250529_230231 delete mode 100644 backend/app/database/myp.db.backup_20250529_230235 delete mode 100644 backend/app/database/myp.db.backup_20250529_231800 delete mode 100644 backend/app/database/myp.db.backup_immediate_20250529_150732 delete mode 100644 backend/app/database/myp.db.emergency_backup_20250529_185111 diff --git a/backend/app/database/myp.db.backup_20250529_150542 b/backend/app/database/myp.db.backup_20250529_150542 deleted file mode 100644 index 898282ba6ba07b548f220a3d1d42c1a18d67fce2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69632 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 L00JQJ-zV@NV?3#A diff --git a/backend/app/database/myp.db.backup_20250529_182203 b/backend/app/database/myp.db.backup_20250529_182203 deleted file mode 100644 index fd64c15a0a55d172eab64088c83c115048a5c016..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126976 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 Ij9UNye+bL09smFU diff --git a/backend/app/database/myp.db.backup_20250529_184851 b/backend/app/database/myp.db.backup_20250529_184851 deleted file mode 100644 index 02aa1e320b7df47f3dd87201b5fc3e7d150f6f0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77824 zcmeI4-)|FF7RNp0haHDt*b0rb64FS(VoM3ch7>5Owk92tlwcQQT2R$a$DT_vbUZW6 zjDaAnsu0wo)oT0R$NdxbrGLa~)z_6)>OSpj_pvKgTJ61eJU{OEM}k_Urute5w(q&W z&gYza&zYG^?%duq1EM@|yq+E?7jwsRl9YQ#QF6JQM1S9)ztQU${V*MUq3=w--%HA! z|DrNOYe}UaS=|$*ALqYa_zQ^mMz*{k5I-&J(mn!WXw)Izr6AfHw^Y`I zDc$$u0SDu`o@ocf(-IX}T_MHE3>$s+>S8ftMxMH+NBpe$bl*3(Y&yVbi@o34xK(f6S8l5J zm9lAYo;R8;bz`l;%F0QriqcYVs4cazs@_os#s0`Pp|OSfv}knQgnMU4XhB`T8{H&@ z=723y)DGBU1T~?hpntLQ{Ae*RpF1b*eaQC&>MG^~v&&bYFMOF7b_78*VMAanQp-o! z4uTywS#ER*2|`!ju^ioqy>`qJr!H(L*PG2vwccQ>bw8&V%ts)S*sECC{d_JjFD*%X zRgQyKcZt_CsV_RVpZ#7Gpk$?t3olEy8bQadZnMqY3pDOzDK%_D47wf$3plMHYcp`8 zp;m(OgMo*ZMO2<%6Ra%sSn3e%LS8<7T6*DxF=xjQNKdnzE#FT*&Ix*_1QT2#Fncu4 z=sh>yqXific}$YvP|LUjZR+b=iM!C)lC9wweM_joRnPEeK4Q9>ZWwgKNkYS51Lu|L zFm^Ds9}8?p>^A#heeqsCFP}Uqy?ny4GJ~_c+^={Cov4%;QrDG#A;-drcm?a%Xt0;+Bp=z=&XtGBNze}yp=4Dxyo)6Y2&2xOl z*v|{@#ET}aNZQ;AqiblhK}yGT2)K+nBu$HYu0?2m75PUZA7d3ur-|htoe&%$%eGkA zTc6I$r%p*^(T&J2vZb#8@a-Rf&X>TPdy+K@>MfB2fD{^7i@l7El#DZ-+Axqhvzpg1nq}w?bh}6W^>hge|z=j_05axcRzTxw!UKAzS=dfJZ`St zGivson|0Q&=?C=ruH*6EYRk2irR9~S+Et}`<*iFAZ(XdNzjXQPj( zdiCn1l_H&^RQh+0{@?`yAOHd&00JNY0w4eaAOHd&00JOzme}3x+YsUP{|~v+ z4~JPn%pC+k00ck)1V8`;KmY_l00ck)1VCT}fx?s=-VtEu|LK4F#|s2N00ck)1V8`; zKmY_l00ck)1VG?dOn^QA$MyfO*uYQ?1V8`;KmY_l00ck)1V8`;KmY_Nf$;DDeU~eJ z2OJ;(0w4eaAOHd&00JNY0w4eaAOHe~lYk=4<_d*EJ@fbf!oLi7rF!Mf6`cP+oR-C` zK>!3m00ck)1V8`;KmY_l00cnbRS4kv|5a$AE(m}C2!H?xfB*=900@8p2!H?x98Lnb z{y&^{!>mC71V8`;KmY_l00ck)1V8`;K;Tsf;QIenXrV3$fB*=900@8p2!H?xfB*=9 z00!3m00ck)1V8`;KmY_l00cnbRS2-_|EbcSa;1Ni{z~8Q0s#;J z0T2KI5C8!X009sH0T2KI5O~c5&P+|qZ@vs~ZCG%FM5jAIDZM{b{($h_g)>5iPs*_auSC0PR1p*)d0w4eaAOHd&00JNY z0w4eaAaFPdDAV$_Io;@)Hvi|H9`U-wApTN^*w4;)o!&y}zqvyG)7-+}N`Ei?W&YcR zuji)=-{e1?{bZ&oUCVu+>-~(1f4-2XHzlOq%lw|kxcd_Prp2+E#&&!pH^wr0_yRAO)1I;6k*t;)&J1TT3%9L_(&NQf^ZFNm;DUD`Z zY24l1TvUp4>|TxXLA|xQUT>AF%gYr(%5_V`wdD$H;}P9=Y^AN0;}r;uGV!7arR8` z(CK8V(tBLn4sGwoJ+FkCus*0IhvxCXw1_64sjaMV-MPfogY8sTVP9RxHAN*|&*>7M zb>G=ZE1#5S)Yn}qdaPTT?J!;uV2?Z`T~0VdzV8~ND2Ck(YZdl0TprgKrx{lliy1TW z)HOZgXU(VkzPV-70Y+Qw{no~zULS9ox@-FA7kyQpSasC0mW4 zV^_B|x<`3|#+@vshE0e;*TY}|rxj#v25vOeN>F|<@X)e|%F}Ctm4!}D9im;x%coCE zFPt#u?DzrcX_m9)`^m>SLGP4cf-3}OkH#6j=f-=q0K+1Wi4|{ywTwH^roO(FxC@Of z*&2?~w}c8@^$dUJBc`kAhCw%+Bs2^*a9)`XV+Zj>R_HiChhx2XFQ1oBo|Ilb;aHi$ z*>6Dr8SXU)i>|dS0GcFqJ=0}7`_Sw&6a?_eJ{d(7K^!`0CbSTHD9GvEpig5BlQ2ui zMrQCv2jVeHI*e9P5)tw5(a_|XbO5S~q1@PP)_JxtK7cw;Y+>tR^GN3w=^R2(SXf0P z;>v*Km@R}2^HZZxH1#n<&|PYMHZRMv^n9>JX`bUV#(rLKCtfsZMbhS07+ph~4N^L$ zL%?OsA!%CFb1g#itH?hR`53EMI!!DG>4e}2S+>Q>-uiT2K6Og^qRZDs6rG~?89||_ zbb?Monl+Sx_GpHeY%)yDbg`T;;Kj=(5{%y|dU|)%CL%bJYxTD>S>mvqdDG-M^KM)k z)}J_@Axu%|ZS)$WtI~W-ga9%+SLP<`Zj~3S@_FYverzlj4l?yYo z^6Dum$FG%!o(D&^)2h*@*}b;J-T2FV9Bg@n^^XWvXNYKY8oMnHUsecU4nTMSSKHS8 zBonXJu81kgWHWhAD*Dty$9gsTG{(|Po;3S08M#k_z_hoLl-?jN%_4f~xD~mu>-eS+ z5@Nx&V<+Kq5CA)-6K7nL3?E*lrd=VTO#PrTHOnrV$M^xardH!`)0HFpSFQ4@Q}n97 zz^?4s^Z(p&_77el00JNY0w4eaAOHd&00JNY0w4eazg7b5|Nj^Af5;vC-@I(pOkj%@!7G%#T`kT zklZzQDO&-GKz5LG`{M5X0ey3SK!Kt!?rq=nO^d_5?Jrz`0zqFjMS%h-a6r+S*`KpZ zN<8FjH^!H?Ozu20&&>0gXXcsR8PWGX*fJcV?3ule<|s?4*HV&{dPh-Gsgy*2-k?AJ zYnpyY`xo?`$xnMpsf90#<2094_zlZ@zVMsLUrqgNGClE&?8liOjc-dgQeU5@Pk+eO?e~f8G<)PBd$+}_vw})drp)GZhOTVZ8r56Xx>DP2D7BrftvMy1>uMdM zd|0Wk->%eW)y2i4ASE5mXoup`Vv&{U5zRKcN~8KwgI((Vp5_>4x7jheejV}jzC-M& ztVMM=L~l}uc$b1`Y`$M*MVQfjJE+jB&*~XnhxD4E2`sPaSk0EHi>+sZPt4s|R;}+G zn6$hVXfC^!Fdcn6*^WJ^18 zjr}gIU~rG!t#7_xsXtKeR39j_hR%6zY}c!sw`weHHY`eY>Ey;@tZ-c!6}dte#2 zvxWRLX>i_<`|goYg1SI&aFGa_5lcj)&E+&N;K@goVAutw^;Ui23&XE-kH#&p_p`{(QO-&EHcE}K?F03mzx3{;dl^PqZ zr#Xe!9)U>MU-{zk=eevrKQBF1IS!uPBE615ebMaN@$0+*B`#%Lcv?8s2sXB~E}P7I zPLn%X#EdQ>Ivo$*0FD~S%6M*+C?y#0Rh$?WetL9Fur$|WsY5g-vhu}?(if&1bB=6> zbee5*-?qb#Il=CT-~?B2j1G-6TE`0JXaPo>9Fj0Nlw$5ci`v?L=q@z2#B-Q>zb$0o zrpNd*A2F<^rt5UV2}6T7f%D9?ny!Z&r-M#r#0LlB zAw$}YR{kQQOwD8}=wgrb3|av-MOQYqwkv$KFg$>okGjIt!<0nV7ST0?VDPu=X;#g* zjY59YhtE>CGg(=dr6=APrRyAR4?; z*H^xOgz_Q1($?t0(pydlju2;?FFw7U&dM`0(w8khF8t`^zmE$B`Kc$^BrLNME6@&I z;f0e76Ej=drW^2rVdD#i&lDZ4HE0qM9LZ|;_hYNXq@0b+liSSISTw9ZGJCqvL_yo& zF-AwFaY%#!GI*`byR3CUTA$K>jxM6(UB-az)HXlZsVcJ(3dMZ!>Uc(8pOI2VS0|6X zyAZloHu<%`h_joj-;0^24T-z)kF!Cr3v0NgdqV8wM($8+R-?D($WQ>K1U9LvaW%ftMD_hz%i-_pf1r)O1p)-m^< zx-c|od+fJzOnaN$G%hD-uh6hFujKD(EVMr$F-FfOXc~+@_gx^>1-=l?Tj|1MQ{bnfeOWa?k0?$HapKmY_l00ck)1V8`;KmY_l;Quv&<4opU>JO)H zT)uKymfxhuukX6wOr@;cRn_u+()(0dTwYY>m7Ap3roS0JuQYB})N7>$b!BZ~aY0>N zxwdw_R9>!Jud3JS*MY1EGQNGv|1tOWXmJudQmtNB)rFPivRWz~XT}FNq nmc@pY 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 diff --git a/backend/app/database/myp.db.backup_20250529_185834 b/backend/app/database/myp.db.backup_20250529_185834 deleted file mode 100644 index e90a7390471285af27ca80d3563b3264c1210e11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106496 zcmeI5?{6DNddImIMT(SV#_{R4O`vuGJGEF#vX&Ah*+$UN3S}!+D2Jxv7>7G%#T`kT zklZzQDO&-GKz5LG`{M5X0ey3SK!Kt!?rq=nO^d_5?Jrz`0zqFjMS%h-a6r+S*`KpZ zN<8FjH^!H?Ozu20&&>0gXXcsR8PWGX*fJcV?3ule<|s?4*HV&{dPh-Gsgy*2-k?AJ zYnpyY`xo?`$xnMpsf90#<2094_zlZ@zVMsLUrqgNGClE&?8liOjc-dgQeU5@Pk+eO?e~f8G<)PBd$+}_vw})drp)GZhOTVZ8r56Xx>DP2D7BrftvMy1>uMdM zd|0Wk->%eW)y2i4ASE5mXoup`Vv&{U5zRKcN~8KwgI((Vp5_>4x7jheejV}jzC-M& ztVMM=L~l}uc$b1`Y`$M*MVQfjJE+jB&*~XnhxD4E2`sPaSk0EHi>+sZPt4s|R;}+G zn6$hVXfC^!Fdcn6*^WJ^18 zjr}gIU~rG!t#7_xsXtKeR39j_hR%6zY}c!sw`weHHY`eY>Ey;@tZ-c!6}dte#2 zvxWRLX>i_<`|goYg1SI&aFGa_5lcj)&E+&N;K@goVAutw^;Ui23&XE-kH#&p_p`{(QO-&EHcE}K?F03mzx3{;dl^PqZ zr#Xe!9)U>MU-{zk=eevrKQBF1IS!uPBE615ebMaN@$0+*B`#%Lcv?8s2sXB~E}P7I zPLn%X#EdQ>Ivo$*0FD~S%6M*+C?y#0Rh$?WetL9Fur$|WsY5g-vhu}?(if&1bB=6> zbee5*-?qb#Il=CT-~?B2j1G-6TE`0JXaPo>9Fj0Nlw$5ci`v?L=q@z2#B-Q>zb$0o zrpNd*A2F<^rt5UV2}6T7f%D9?ny!Z&r-M#r#0LlB zAw$}YR{kQQOwD8}=wgrb3|av-MOQYqwkv$KFg$>okGjIt!<0nV7ST0?VDPu=X;#g* zjY59YhtE>CGg(=dr6=APrRyAR4?; z*H^xOgz_Q1($?t0(pydlju2;?FFw7U&dM`0(w8khF8t`^zmE$B`Kc$^BrLNME6@&I z;f0e76Ej=drW^2rVdD#i&lDZ4HE0qM9LZ|;_hYNXq@0b+liSSISTw9ZGJCqvL_yo& zF-AwFaY%#!GI*`byR3CUTA$K>jxM6(UB-az)HXlZsVcJ(3dMZ!>Uc(8pOI2VS0|6X zyAZloHu<%`h_joj-;0^24T-z)kF!Cr3v0NgdqV8wM($8+R-?D($WQ>K1U9LvaW%ftMD_hz%i-_pf1r)O1p)-m^< zx-c|od+fJzOnaN$G%hD-uh6hFujKD(EVMr$F-FfOXc~+@_gx^>1-=l?Tj|1MQ{bnfeOWa?k0?$HapKmY_l00ck)1V8`;KmY_l;Quv&<4opU>JO)H zT)uKymfxhuukX6wOr@;cRn_u+()(0dTwYY>m7Ap3roS0JuQYB})N7>$b!BZ~aY0>N zxwdw_R9>!Jud3JS*MY1EGQNGv|1tOWXmJudQmtNB)rFPivRWz~XT}FNq nmc@pY zqYYUeu_08)>TxDLxFO3UHe^X`$a1tHOCvW#T|3T<4Q|NNhz%);4Oxmdq%>+n)|Si1 znKOeMQW~)#s@RZHv?1!K4OuNOA7`Y&4N*sI$fDQ~HQJEH5gVeesAabQpDFxVs_-9$ ze=PiM;japRK`-zE0T2KI5C8!X009sH0T2KI5C8!Xcs>L!j9rn$d-|13GOawGOj}MT z)0W1PX{9r-k6p=$b*S$5|NS~u`1SKK3tB+{1V8`;KmY_l00ck)1V8`;KmY`uHvvV; zq$VaND&k=k@0$VF)U}l|yZ@*E=^tJo00JNY0w4eaAOHd&00JNY0w4eauP_1J|G&bW z3)4UV1V8`;KmY_l00ck)1V8`;K)@q_`+v9s2!H?xfB*=900@8p2!H?xfB*=*`UG(Q z|LXTKECc}%009sH0T2KI5C8!X009sH0o?z?2S5M>KmY_l00ck)1V8`;KmY_l;MFI< z?*Avw{a32+PldlM{Jij_KniacWSW2%2!H?xfB*=900@8p2!H?xfB*=5mkC^&NXu_u z=-Z@c+Yj4@Lz-IOF^#TH9yfVvQ&ko9Quef5C7SDxGBlUWOBuRfoLzRc4r!8(X0&N8 zMSXKTEnji#4DCjtY5HtM%NkCeqYd3SEvb6 zdS*%XlUTj}=O$Cuw^tPUCr|rQD*S7T{>2LfKmY_l00ck)1V8`;KmY_l00cnbyGcMv z%QteG-Z8rTpLaT>*CINx=XXi>vxSz~nJWBGY9jk_YU=L`zbyQG@>f$on@msqBKvXX zN8{Vljnvnv&hOCh&!@8Vd5Ltq${)9ck3#&X9quC&{ygQ}dc9g{RF%!zyVZ}BVOf>D z5_xUc6kc}L*Egr|hb+Y)*PXK&`K`C4A2`}>n|P0Z*uxMt`gzK$x>32gRaK&rS!cIB zN82*T$`qfSpUld|qV&@ra&`NCVmr+qdC1;v@#?IgQj{sP`JACsLmSmw)w)vKZYZ^# zt*tpFpJR`aln*QQ_1l&Dth%^Z6r|j?P+VFpvNAoQ*=AR1R6lC4OTFLI9K-B3sSEgZ z#MAo@v7@pU)!`7msX5BKv=17a?^jt7_o-1(p;w>xP^lT3!19`o)ohu%*m@@T#N3T# zrH|hZ%wE&50?lRD5~hRpWTG8=Mw>JRG^KKx+s-AH<{U&+xw=}WWr#*vJ+nn@rhfM* zYJ8X;Ghef)=um4nyC&o11MZPeNQ)DWk?&jjAd0S=sMM<))q1tIUcIMy z$@ai9Zf6VmY0}`lA@|)Qp#&e&1Jy^+j94N0PJm4RKhI_5`FZK7%5m`Q7U^{i>WgOAj$h{mC~+y{!qdX3MzFD^ zb=i~cp3~$`7BQnsh)&0YH-MuCvNE0(=VtEuTaop9`+I&T8!nQ1j$Cn9m@V}b2}+2%B?U%Z#i%G1-*vqu~& z>u~lnA%Jw}n$e>Ij6Hhv6MAG7IH@dog<}K-%4Gxzv zhosA*j@2e~edYT{C?C=*ZH+E0z2$`92ywRg;?vvdtUNO#ec9sU!jDe=`?z3`pL&8# z!ZItd0`1ThUO34xF|(y@x&bd3Hojo^OwrL=gC-Hdk*s!qKekFt%Gt;~xy@XSMZ@|d zv!@G96toQ~ zS4(T+lH}xW>Y0(~Q*s^ax1&#EEWPE4vLCV{w~6Bz-TiP$uM>-|B0ABy<-4$D+J+Dk z0>OdV4a21u0Cx>DSaF@y@$Ow})D?Wn)DMbd8Fte=#1D9HHcR|1T|9GoR+VQRqj&Wa z?9QI;|EFGK|KJ4zAOHd&00JNY0w4eaAOHd&00JQJsuEzo|6fRdlREdmQ~#O!=iE?BvI}aQs_A(Q84T7CKT=O(^@Y_YZW&B`R||6?R_Ef_Y;*0V!sTlR1ok(P*hp* z&U8k;GA)t7Qoal2wupWFy+j3(3`{M%^ewpmy^OpxE%ilZ-WCL{jpdaGD-1IQO2edL z?LtPLpOy?!F?&|+Y5o3StzM2mrFUK2c|9Ymvh*;}#~*uhT5RKiUri@eikX;Fo)R1= zD{h^qFy#nLw*-HH&p&=|h)#D`B~a)-@jpKI8g+<^(($dJnUT$ZzKKZtsbfVFFC_Fw zgkg!q!MI4S+2H8FoWhR@gy-WvD`e%R8R=LJ+T(SR?fJHU`Ff%mzQi8{!I?XDK#$t( z%RNt;Q{3I0uvM)gssApxA0t-_fH(%G^ z9i2s@>Ty0XH)J<7I8+xqqY@mQi=_wo#e;}Jb}<>}6X}^r9w-K$XpB%Ba$1G?fAl~M z&L^I9XqAy>YoKAL^Kd?q?f+*Af1N7)cj4dZcL4sf@Hg}VFAx9$5C8!X009sH0T2KI z5C8!X0D+fH;B5NMoMi6pwT&*xL@&mp7wPE5SoGq|Bvp{}6yW^-%kECp4+0)aiIu diff --git a/backend/app/database/myp.db.backup_20250529_230231 b/backend/app/database/myp.db.backup_20250529_230231 deleted file mode 100644 index 1b13074fcd28499f116d9caca888a3aeecf5329e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106496 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 diff --git a/backend/app/database/myp.db.backup_20250529_230235 b/backend/app/database/myp.db.backup_20250529_230235 deleted file mode 100644 index e806586bd0db2a537926c0ab62db72ca6e38b33a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106496 zcmeI5-)|dNcE@M*gA{2=OyX6hNucfkj%%^DWX@2OWCcM&E3~b(BH0QZ$6W-(h;t>4 zJ>-lzL)$V?1hRvy+lTI7uvlRKfC7tsSfEes!#?ioV%q{+pg^!MTNFhLq`(42@4fT$ z@`tQ6u-!P{fh2P7x%b?AKKI-oGjl|KbbZ6}iMs1_T86KdrB@_bmflxYNs?sx`zHO3 zj@Rj%vFL=pGWpXESz7p_I8JlPg+H>quNMAz;+Ip8@_(54Y4%Fy()hA`O8U*ylze^p z)ya%<`n3E*-`KH~og+;2bMceDdmv ztWqq>KmL@f+v^g~Z*<6A_UegelY&Z7rq1PamZ`39)@zq*+v?_4UERE~v2jk#=h{Y# zs2^9i*RE8z=d@C(C`d`mug?3)b`0Ng+Kragj_T-5@A||` z%bHY&Ps|4G_zx(E`uc}8R)iVd_2LS{`rMAy_DQFan85NnzT0Rzrr3HWxb5upWHq|} zzC+8qvF1u(3DeQ_`rEN<*`y($(JK{hJD0eIzn@YS=xREyB^v2=oF?&@`kjNc@kx4* z`G!kH_YAwyb{MY+aEII`O-{IneAhJxQ4G}dTNUW(PmlA9&5W~)$&49!;94Ex^>&}( zdDdQ=Rxr57u5GV>Slzy*Uaj3y=PZ-+ytK7lTfe-?(&my+++?`XAtVT0sb1XL+Nf1G z*=T*5Q-tjih$Q`$FCKoD%PRBp@?(wT;MrZ$X<5`4ownC|o)@6>N*NcPmP|E*jZLG? zCi9Np;7*n@qfLlO$3r-P(+09Kp&Rv;5{wTk?i&_SdU{N-w7_GjL)0g-%BfTG=T5NZ z9C$uyHEd_k^OCnY!S0mc2v_i}7F}nImK)E}0t}nnBgx{R_qYQs>KS{9yU?|zH-}?( zZ6O0Uy@x;Z5zB2Drb#E9WN8Q|aGse~)Asx3V}b2}+2(0jKmS2CtIW*EPwsQ9ti##w zga9&_YmT?N>b(F=;x#*#%Vzez*7r~lz$f!$w5kZ=z(ISK7SirpY>lShrE3k7u%3=P znGqkn5DyvB!DAgjI4i~#S;3un(orLl7Po`dHR!W&OUG>Rxr{j^ z-4?Z6o6!ALJ+_>3kF50N7y86 zv-) zF@+`y+6Ip?Ix4MuL|8xu@0EF%HTOyL4(;dkCc3xF7_b|g>(_78)VUOeV!n8OJfp15 z%97PK$%F7Jgzl9cejaV&yoMI_V&<_eb2t9ca=h5`71kROdYvJntJBbFvH!9{0CNn& zA>78k;Uzn9Ow?1rY=lO(KmA84T=8X009sH0T2KI5C8!X009sH0T2Lz?;e3e zQ+`c)M>!lnqvWd9DhE(CO!|2B{TAso3B7MTzeCy&7wCOHp8U4H^R}kHy;0TIuHE|h zLjB(Pn|qtCb-hH^|Dszno7(dF9lL2?)GqB-&4rCU-T2t;?q7Sjbp6g+mFcxSpFYEN zI$WDx(kt_&%DjF-)mBy)E30LFVR8Aw^5Sw@a$!|pT&-veG+C=GrX+fKwWO_i2 zDtz^AHV|zG0T2KI5C8!X009sH0T2KI5C8!X7(ifRR0-|~u=xMXz2!H?xfB*=900@8p2!OzMfWV=enU=mk^Uj&GXB6eFiE8y)@TpJg(lt%1+$5bl zYH6{g&Z`$m$EN>vJ+Ia;R<#TIg0{4>K!c4-OBYsF^~z#(wWh7okJ?xgWc(2%|KsfL z(&9u6ORi|EnzpdCSkZJnExE8-Dz9qgg++a-TwXaWjZaJOMNOok*>%HpRNB0fI+w0( zv3SfTFN#gB2uhCGWU3<_mmNf3S5_7@8kSuuAC|_B)#UPVn_L!~yqIos`Pfa?R#KEx zO|EE~eyENPc7*aVsp?`A%jqWS$8F-uq7b>>;|S`=;3n$FY@#MMQBOBfJ8lz~g|K_A zw~6xLCThoQVo7YGmTqF{m`&7{#Q1-)iR}4*rtnu%;ol1XSol@p=Y^lp6C5A_0w4ea zAOHd&00JNY0w4eaAOHf-hQP_uv$A-#zm(}utBm)jEspi4l}G#2^pV#_&*sEBwBYmq zekT=v_iW69RuBLI5C8!X009sH0T2KI5C8!X0D)&sK$SDn#Kc5373h(C{@;qWvQ%N$ z|MW}$aDV^^fB*=900@8p2!H?xfB*=900_Lq1aSTT5_c|40|5{K0T2KI5C8!X009sH z0T2LzkN~d#;R+xC0w4eaAOHd&00JNY0w4eaAn@`N!1e#j-^Z{J1V8`;KmY_l00ck) z1V8`;KmY{T_5aB98L6PsKR7@D1V8`;KmY_l00ck)1V8`;zUu@I?~Tk#r?taTS*p%T zZ%E&#Kys2aB~`2RwJOyu+g9sNtNGBlp$L2eRQ49zEhHZ8RSBlelOngqT#w7=N>UHtgMulbxmKU-#|&f zgR-xHzOt}bs;ub3*Bx?Ip`;W`$|W_ZB#>OtN{64yDZ{16aOtfowVD!mK891PS5`~Q z3rj2IidO27+ob6eGd6km-j2DuXQnMLF;tb(LZzfrG(#lXg=KdApPT*%sqjyQzb*W% z@Tfov?-rEl|DZ`YKmY_l00ck)1V8`;KmY_l00cnb{||wM+*t9wlY3p_`Hc>_%U(Up ze9#b68lG?XT~AlFwrCZL~;(u-hLrm#V!rKBk-v>P+%Q;y)c5Q?y=Tq=XjEkB%u)fwkY${(NL? zcI~9wvD*Hi_D6z-wnR;k$7ah)l*Ho#@+s*z(vAOv;h#-q>3tFTaGBp$Np5*WcQt}rBm8#B^xAf< zTCb_=n;+CZQHNz!^J?nY+EjVjxk%qRmETM$#<{LeW|Y&X~@j*adms`N_BfqE0v0Zl-rhw^-__Q=@7$n+G@S_Nu8aV-Hzc~ zPP;+7I;x{Lz3US%Eo)L8G>oKS`059=59;e5)>x6?R#{wOSYLSasF9e!@;biTXga3Y zdM3E-?DS-%x7qfcPQ!9z&6U6sri1omUpsa!n=}M8dZof`=MvZO_fx6@T}{WeL?da8 zP?LB}{mwz!_$0l@{2;8zup4cM@rnQkK{t$W5BaWZ4x$)EC-u^ef_Hk;@V^$)Atx74e(Tk4!;a-NsAwrlH`H(AP8(1djY#~2Q8k{%bzH=ay;6r+#`V^XDmPk=MW(lL8nov@(KVN(_na?U` z&d85%@;QOJinVJs`3UrclM}*>Ac&5b5EzTp@DZj1|G-U#8y!M|&@~Qh$1r2B9WunJ z3!Cc2t*wn(b(4+Or#VH~9)U>GU-{zUXSu90KQBMlI1ZlOC7qT6J1r zJS~}O1RI-1o87_g_zmu4DKpxHm~=ewxIn{B8_3FpZq!#wFg~ofZ&*a>=`q350w<>q zQJ=^vr%uVAJHeWB;Q6H0u$?{6OWx)LyHkQAT*0?m^pS?qa^pE#fMJt+#Ez#yy~iDB zQP0>*+=Z?!y*V7SYYQ2;={@|Jk63QQFikq)cyV>%1kN+lYTABE63oW}+X1u9)3AR2 zgKSornUSB|=U7>Xv)>5;WH8qpZ*|ps0np7*vtzkz?d)rP4+Q~yGEYXUiXaXgv}b7{ z?Y>3MX!>2c)-Va{>9~^_@xcr6kRctcR?#M+Ld|3PqS*i=_(X8efTVOC6iSYMSc{HQT9lUG4`^8JMpBWMkFn6 z2dit)XW^EP+2C^-b4a=^YPmL{`>V)568Vr`u?_kRGu%!Hj?l|CUwnLJEUV1U%3n13 zxQJG#=yhB$C`vuTCSjY^w*zg_9bPiYFfp^mc7g>j9yXC+_)O6x~G#&JfYnY3Q`r ze_0`bIR@bnZe!o@lAXAwuZUZcqr0i&q*fn2aICLKpRTd=k|)i6$d242zHhbnk}bVS zT)K;BrPr;^tpbxeOP;9m@%KT-+ac`z`-KXw*>-5nR2dT_mDU{i8UV zVHeXw{Db#$L+3AJ#gV6H)p*uXdR0HcuI$}Jjt9N|JU&r72^N_5CDOf zg@CVQmG_GB;Zz)A55z3Ncw>w~q1IbxOJdGW?;8AVg% zyRklg+ndv343QK+}y)LRw>WQhg#g8 zu#3FVx1-b7`kE0*qCpVH;<3OzYIh_LJ?WepJmpF1K9r`j%JPhSSdA-BIbvWMOL(QP z>b`7!*0UUO#S|%x9Wi_wHOQaGCrv=yA`gWWC$A$OAs+o`FL3!NB7uG`7k_Hp6FrxX zEl58oPp7A24%kDoArTP4lomhg4eJa2j?N-!^@v-{4S7l$2ix_;uEZgAJ?U|NF+efS zE+!*xk;YQ;g<@c&V~X04C>G}b=|CC8Egluj%1E<4(6FdI#4WPt|Cz!sq{4p{eosFG z@YjXErzbc-00ck)1V8`;KmY_l00ck)1V8`;UNnKpvA1%vv%70sZ8Dxd8KWl?ktCBo z8BL#zoS@lqp#sGJzv%8n{U87WAOHd&00JNY0w4eaAOHd&@azc$pa1`*RQU4Q*M%BD z00ck)1V8`;KmY_l00ck)1V8`;o*{uZN5d}x=>Pox;QIe7seu3Se})|Z)gS-@AOHd& z00JNY0w4eaAOHd&@InYoj4Hv`0wVtZh44qEAOHd&00JNY0w4eaAOHd&00JQJTnXU% z|GDBuWgq|oAOHd&00JNY0w4eaAOHd&@InaS`u~MsN2MSD0w4eaAOHd&00JNY0w4ea zAn;rX;QIf$;zng400JNY0w4eaAOHd&00JNY0wC~02(at_k;3n#!hg~~I6wddKmY_l r00ck)1V8`;KmY_l00h3x1Wt_3<~rmyY5K&R9G#U7*X=m>h&l4VUL8{H diff --git a/backend/app/database/myp.db.backup_20250529_231800 b/backend/app/database/myp.db.backup_20250529_231800 deleted file mode 100644 index 46a0c1b11bdaf9e0fa80c93e72b3fd5b58a6a46a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106496 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 LZr{0MnJ4}qPzCDy diff --git a/backend/app/database/myp.db.backup_immediate_20250529_150732 b/backend/app/database/myp.db.backup_immediate_20250529_150732 deleted file mode 100644 index 9208bac142bde78650d24e326b07136df6f74bb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106496 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 z zJ~E_+AL2zEQos+Na|O*SZl@3P?hDf?xiTa6t3l=zl_$?F8ugHdvL1>ylsSzNWK0z3 zI;2(2E97ur@*b*idnzSACyV_`paC+ob>6EP2Fzgo82|O1XF$ z`i6rmBRL9-wl&f;XlscUqiq-sTl0-cG=!#c{f(hiT;aWpnFWm62j4$xP^h18AueT- z^3zX?Z?N*)*P5ndunwU{@3UOFqakz7ZgZZ@Kjvwt%iY;dr{t3-#e0@3E;Ka}>yY7v zg>lBTtH7WHhMFVGj7(tM3j=M-JDfTQCj-S`46D(LOd9-=WS}zX;9_<(z0v5B0U{8` z#uBgQ$r;#@c|pk=k+_QT#`p)RqkG>#Uz!8S+SI{wGj1?13<4nE zf?e;L9d7#KYd=7N1Mk_~gSxzL2!mRq2wj`Vc@az9BZDXnp*78g(T3FvX_LwwGl6i2 zVSj$qeWiV>EVjD$}Eb{iqr6 z7prNSO|)HvbU6d&d5@kC_^NX$q8+|}A<5?Ycf3AI@YKrhC&YI()-QZ6{(FKe zkncODOk5wKMu2PUEi&0`2EE?55lySkPVO5DIM`CO^!g|x!e!QJ_VxxQti$27TF2|m z#Q3W!PDM`I=sxx!izaePV*O20%i&sT{L&`EfUIRsCzA5o2~l9PB5!yhlXi=_-9|_Omn1bO=*c+bbZXDQ(pH9p)+L^qc40p6yFoc#@w>#1n2+@1oq z1A;t8GS78hYh6jwR)V8PVhg(?=4X)S1yzy%>Q=&z*ZH zwjB1SA0Z6_JCoQZD(p;BlzX$2DePy&enz%?liR&O4Xd|b3)|QHP1s~~!}hgo?n~Xi zhUfne;dB-%g8&GC00@8p2!H?xfB*=900@A<0}{ac{{ev^ItYLO2!H?xfB*=900@8p z2!H?xJcI=3`adE4yCD5q`b7Fj`Y&>e3j{y_1V8`;KmY_l00ck)1V8`;K;R)I5RYZV z1bvCqml%DSh{ZA)y8cf~e=bP>E&Ye|FVat>e~^A8y-z%FfdB}A00@8p2!H?xfB*=9 v00@8p2>j*<9ElwlJLHrQavWPaa-WLaCnNWX$bCF=AB)^iWMjuOp3MIRo(l?Q diff --git a/backend/app/database/myp.db.emergency_backup_20250529_185111 b/backend/app/database/myp.db.emergency_backup_20250529_185111 deleted file mode 100644 index 4e86411b5803e34b1e4767ce981907694f15c1ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYBBV/dev/null; then + log "✅ Chromium erfolgreich installiert" + elif apt-get install -y chromium-browser 2>/dev/null; then + log "✅ Chromium-Browser erfolgreich installiert" + elif apt-get install -y firefox-esr 2>/dev/null; then + warning "⚠️ Chromium nicht verfügbar - Firefox ESR als Fallback installiert" + # Firefox-Konfiguration für Kiosk-Modus anpassen + progress "Konfiguriere Firefox für Kiosk-Modus..." + FIREFOX_BROWSER="firefox-esr" + else + error "❌ Kein Browser verfügbar (chromium, chromium-browser, firefox-esr)" + fi + log "✅ Minimale X11-Umgebung installiert" } @@ -316,6 +329,66 @@ install_system_dependencies() { create_backend_services() { log "=== ERSTELLE 3 BACKEND-SERVICES ===" + # Python-Startskripte für die verschiedenen Ports erstellen + progress "Erstelle Python-Startskripte..." + + # HTTPS-Startskript (Port 443) + cat > "$APP_DIR/start_https.py" << 'EOF' +#!/usr/bin/env python3 +import sys +import os + +# Füge App-Verzeichnis zum Python-Pfad hinzu +sys.path.insert(0, '/opt/myp') + +# Setze Umgebungsvariablen +os.environ['FLASK_PORT'] = '443' +os.environ['FLASK_HOST'] = '0.0.0.0' +os.environ['FLASK_ENV'] = 'production' + +try: + from app import app, get_ssl_context + + ssl_context = get_ssl_context() + if ssl_context: + print("Starte HTTPS-Server auf Port 443...") + app.run(host='0.0.0.0', port=443, debug=False, ssl_context=ssl_context, threaded=True) + else: + print('SSL-Kontext nicht verfügbar') + sys.exit(1) +except Exception as e: + print(f"Fehler beim Starten des HTTPS-Servers: {e}") + sys.exit(1) +EOF + + # HTTP-Startskript (Port 80) + cat > "$APP_DIR/start_http.py" << 'EOF' +#!/usr/bin/env python3 +import sys +import os + +# Füge App-Verzeichnis zum Python-Pfad hinzu +sys.path.insert(0, '/opt/myp') + +# Setze Umgebungsvariablen +os.environ['FLASK_PORT'] = '80' +os.environ['FLASK_HOST'] = '0.0.0.0' +os.environ['FLASK_ENV'] = 'production' + +try: + from app import app + + print("Starte HTTP-Server auf Port 80...") + app.run(host='0.0.0.0', port=80, debug=False, threaded=True) +except Exception as e: + print(f"Fehler beim Starten des HTTP-Servers: {e}") + sys.exit(1) +EOF + + # Skripte ausführbar machen + chmod +x "$APP_DIR/start_https.py" + chmod +x "$APP_DIR/start_http.py" + # Service 1: Kiosk-Backend (Port 5000) progress "Erstelle myp-kiosk.service (Port 5000)..." cat > "/etc/systemd/system/${SERVICE_NAME_KIOSK}.service" << EOF @@ -374,20 +447,7 @@ Type=simple User=root Group=root WorkingDirectory=$APP_DIR -ExecStart=/usr/bin/python3 -c " -import sys, os -sys.path.insert(0, '$APP_DIR') -os.environ['FLASK_PORT'] = '443' -os.environ['FLASK_HOST'] = '0.0.0.0' -os.environ['FLASK_ENV'] = 'production' -from app import app, get_ssl_context -ssl_context = get_ssl_context() -if ssl_context: - app.run(host='0.0.0.0', port=443, debug=False, ssl_context=ssl_context, threaded=True) -else: - print('SSL-Kontext nicht verfügbar') - exit(1) -" +ExecStart=/usr/bin/python3 $APP_DIR/start_https.py Restart=always RestartSec=5 StartLimitBurst=5 @@ -431,15 +491,7 @@ Type=simple User=root Group=root WorkingDirectory=$APP_DIR -ExecStart=/usr/bin/python3 -c " -import sys, os -sys.path.insert(0, '$APP_DIR') -os.environ['FLASK_PORT'] = '80' -os.environ['FLASK_HOST'] = '0.0.0.0' -os.environ['FLASK_ENV'] = 'production' -from app import app -app.run(host='0.0.0.0', port=80, debug=False, threaded=True) -" +ExecStart=/usr/bin/python3 $APP_DIR/start_http.py Restart=always RestartSec=5 StartLimitBurst=5 @@ -469,7 +521,7 @@ ReadWritePaths=$APP_DIR WantedBy=multi-user.target EOF - log "✅ 3 Backend-Services erstellt" + log "✅ 3 Backend-Services mit separaten Python-Skripten erstellt" } # ========================== AUTOLOGIN KONFIGURIEREN ========================== @@ -498,6 +550,110 @@ configure_kiosk_browser() { KIOSK_HOME="/home/$KIOSK_USER" + # Openbox-Konfiguration für randlosen Vollbildmodus + progress "Konfiguriere Openbox für randlosen Vollbildmodus..." + mkdir -p "$KIOSK_HOME/.config/openbox" + + cat > "$KIOSK_HOME/.config/openbox/rc.xml" << 'EOF' + + + + 10 + 20 + + + yes + no + + + Smart +
yes
+
+ + Clearlooks + NLIMC + no + yes + + + 1 + 1 + + Desktop 1 + + 875 + + + yes + Nonpixel + Center + + + 0 + 0 + 0 + 0 + + + TopLeft + 0 + 0 + no + Above + Vertical + no + 300 + 300 + Middle + + + + + + 8 + 200 + 400 + + + + + no + no + + 0 + 0 + + + 100% + 100% + + yes + yes + yes + yes + above + + + no + no + + 0 + 0 + + + 100% + 100% + + yes + yes + yes + yes + above + + +
+EOF + # .bashrc für automatischen X-Start erweitern progress "Konfiguriere automatischen X-Start..." cat >> "$KIOSK_HOME/.bashrc" << 'EOF' @@ -509,18 +665,32 @@ fi EOF # .xinitrc für Kiosk-Session erstellen - progress "Erstelle Kiosk X-Session..." + progress "Erstelle optimierte Kiosk X-Session..." cat > "$KIOSK_HOME/.xinitrc" << 'EOF' #!/bin/bash -# Bildschirmschoner und Energieverwaltung deaktivieren +# Bildschirmauflösung automatisch erkennen +RESOLUTION=$(xrandr | grep '*' | head -1 | awk '{print $1}') +if [ -z "$RESOLUTION" ]; then + RESOLUTION="1920x1080" # Fallback-Auflösung +fi +WIDTH=$(echo $RESOLUTION | cut -d'x' -f1) +HEIGHT=$(echo $RESOLUTION | cut -d'x' -f2) + +echo "Erkannte Bildschirmauflösung: ${WIDTH}x${HEIGHT}" + +# Bildschirmschoner und Energieverwaltung komplett deaktivieren xset s off xset s noblank xset s noexpose xset -dpms +xset s 0 0 -# Mauszeiger verstecken -unclutter -idle 0.5 -root & +# Mauszeiger verstecken (aggressiver) +unclutter -idle 0.1 -root -noevents & + +# Openbox im Hintergrund starten +openbox & # Warte auf Backend-Services echo "Warte auf MYP Backend-Services..." @@ -537,43 +707,139 @@ done echo "Backend erreichbar - starte Kiosk-Browser..." -# Chromium im Vollbild-Kiosk-Modus -exec chromium-browser \ - --kiosk \ - --no-sandbox \ - --disable-infobars \ - --disable-session-crashed-bubble \ - --disable-restore-session-state \ - --disable-web-security \ - --disable-features=TranslateUI \ - --disable-extensions \ - --disable-plugins \ - --disable-popup-blocking \ - --disable-prompt-on-repost \ - --disable-sync \ - --disable-translate \ - --noerrdialogs \ - --no-first-run \ - --no-default-browser-check \ - --autoplay-policy=no-user-gesture-required \ - --start-fullscreen \ - --window-position=0,0 \ - --user-data-dir=/home/kiosk/.chromium-kiosk \ - --disable-background-mode \ - --force-device-scale-factor=1.0 \ - --disable-pinch \ - --overscroll-history-navigation=0 \ - --disable-dev-shm-usage \ - --memory-pressure-off \ - --max_old_space_size=512 \ - http://localhost:5000 +# Browser-Erkennung und -Start mit optimierten Vollbild-Flags +if command -v chromium >/dev/null 2>&1; then + echo "Starte Chromium Browser mit Auflösung ${WIDTH}x${HEIGHT}..." + exec chromium \ + --kiosk \ + --no-sandbox \ + --disable-infobars \ + --disable-session-crashed-bubble \ + --disable-restore-session-state \ + --disable-web-security \ + --disable-features=TranslateUI \ + --disable-extensions \ + --disable-plugins \ + --disable-popup-blocking \ + --disable-prompt-on-repost \ + --disable-sync \ + --disable-translate \ + --noerrdialogs \ + --no-first-run \ + --no-default-browser-check \ + --autoplay-policy=no-user-gesture-required \ + --start-fullscreen \ + --start-maximized \ + --window-size=${WIDTH},${HEIGHT} \ + --window-position=0,0 \ + --user-data-dir=/home/kiosk/.chromium-kiosk \ + --disable-background-mode \ + --force-device-scale-factor=1.0 \ + --disable-pinch \ + --overscroll-history-navigation=0 \ + --disable-dev-shm-usage \ + --memory-pressure-off \ + --max_old_space_size=512 \ + --disable-background-timer-throttling \ + --disable-backgrounding-occluded-windows \ + --disable-renderer-backgrounding \ + --disable-features=VizDisplayCompositor \ + --enable-features=OverlayScrollbar \ + --hide-scrollbars \ + http://localhost:5000 +elif command -v chromium-browser >/dev/null 2>&1; then + echo "Starte Chromium-Browser mit Auflösung ${WIDTH}x${HEIGHT}..." + exec chromium-browser \ + --kiosk \ + --no-sandbox \ + --disable-infobars \ + --disable-session-crashed-bubble \ + --disable-restore-session-state \ + --disable-web-security \ + --disable-features=TranslateUI \ + --disable-extensions \ + --disable-plugins \ + --disable-popup-blocking \ + --disable-prompt-on-repost \ + --disable-sync \ + --disable-translate \ + --noerrdialogs \ + --no-first-run \ + --no-default-browser-check \ + --autoplay-policy=no-user-gesture-required \ + --start-fullscreen \ + --start-maximized \ + --window-size=${WIDTH},${HEIGHT} \ + --window-position=0,0 \ + --user-data-dir=/home/kiosk/.chromium-kiosk \ + --disable-background-mode \ + --force-device-scale-factor=1.0 \ + --disable-pinch \ + --overscroll-history-navigation=0 \ + --disable-dev-shm-usage \ + --memory-pressure-off \ + --max_old_space_size=512 \ + --disable-background-timer-throttling \ + --disable-backgrounding-occluded-windows \ + --disable-renderer-backgrounding \ + --disable-features=VizDisplayCompositor \ + --enable-features=OverlayScrollbar \ + --hide-scrollbars \ + http://localhost:5000 +elif command -v firefox-esr >/dev/null 2>&1; then + echo "Starte Firefox ESR mit Auflösung ${WIDTH}x${HEIGHT}..." + # Firefox-Profil für Kiosk erstellen + mkdir -p /home/kiosk/.mozilla/firefox/kiosk.default + cat > /home/kiosk/.mozilla/firefox/kiosk.default/user.js << FIREFOXEOF +user_pref("browser.shell.checkDefaultBrowser", false); +user_pref("browser.startup.homepage", "http://localhost:5000"); +user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); +user_pref("browser.tabs.warnOnClose", false); +user_pref("browser.sessionstore.resume_from_crash", false); +user_pref("security.tls.insecure_fallback_hosts", "localhost"); +user_pref("browser.cache.disk.enable", false); +user_pref("browser.cache.memory.enable", true); +user_pref("browser.cache.offline.enable", false); +user_pref("network.http.use-cache", false); +user_pref("browser.fullscreen.autohide", true); +user_pref("dom.disable_open_during_load", false); +user_pref("privacy.popups.disable_from_plugins", 0); +user_pref("dom.popup_maximum", 0); +FIREFOXEOF + + # Firefox CSS für randlosen Vollbildmodus + mkdir -p /home/kiosk/.mozilla/firefox/kiosk.default/chrome + cat > /home/kiosk/.mozilla/firefox/kiosk.default/chrome/userChrome.css << FIREFOXCSS +/* Firefox Kiosk Mode - Hide all UI elements */ +#navigator-toolbox { display: none !important; } +#sidebar-box { display: none !important; } +#urlbar-container { display: none !important; } +#TabsToolbar { display: none !important; } +#nav-bar { display: none !important; } +#PersonalToolbar { display: none !important; } +.toolbar-items { display: none !important; } +#main-window[sizemode="fullscreen"] .tabbrowser-tab { + visibility: collapse !important; +} +FIREFOXCSS + + exec firefox-esr \ + --kiosk \ + --width=${WIDTH} \ + --height=${HEIGHT} \ + --profile /home/kiosk/.mozilla/firefox/kiosk.default \ + http://localhost:5000 +else + echo "FEHLER: Kein Browser verfügbar!" + exit 1 +fi EOF # Berechtigungen setzen chmod +x "$KIOSK_HOME/.xinitrc" chown -R "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME" - log "✅ Kiosk-Browser konfiguriert" + log "✅ Kiosk-Browser mit optimiertem Vollbildmodus konfiguriert" } # ========================== PRODUKTIONS-KIOSK SETUP ==========================