Ë
    `Qbj'1  ã                   ó  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZ  ej                  e«      Z e«       Z e«       ZdZg ZdZdZdZ G d„ d	e«      Z G d
„ de«      Zd„ Zd„ Z G d„ de«      Zy)é    N)ÚLock)Úxauth)Úget_helptextÚplatform_is_osxiè  é
   çš™™™™™¹?c                   ó   — e Zd Zy)ÚXStartTimeoutErrorN©Ú__name__Ú
__module__Ú__qualname__© ó    úS/var/www/html/venv/lib/python3.12/site-packages/pyvirtualdisplay/abstractdisplay.pyr
   r
       ó   „ Ør   r
   c                   ó   — e Zd Zy)ÚXStartErrorNr   r   r   r   r   r   $   r   r   r   c                  ó~  — d} 	 t        j                  | «      }d}t        j                  ||«      }|D �cg c]"  }t         j                  j                  | |«      ‘Œ$ }}|D �cg c]$  }t         j                  j                  |«      sŒ#|‘Œ& }}|S # t        $ r t        j	                  d«       g cY S w xY wc c}w c c}w )Nz/tmpzmissing /tmpz.X*-lock)
ÚosÚlistdirÚFileNotFoundErrorÚlogÚwarningÚfnmatchÚfilterÚpathÚjoinÚisfile)ÚtmpdirÚlsÚpatternÚnamesÚchildÚps         r   Ú_lock_filesr&   (   s£   € Ø€FðÜ�Z‰Z˜Óˆð €GÜ�N‰N˜2˜wÓ'€EØ38Ö	9¨%Œ"�'‰'�,‰,�v˜uÕ
%Ð	9€BÐ	9ØÖ	-�œ2Ÿ7™7Ÿ>™>¨!Õ,Š!Ð	-€BÐ	-Ø€Iøô ò Ü�‰�NÔ#ØŠ	ðüò
 
:ùÚ	-s"   „B µ'B5Á"$B:ÂB:Â B2Â1B2c                  ó    — t        t        d„ t        «       «      «      } t        | «      rt	        t
        t	        | «      dz   «      }|S t
        }|S )Nc                 ó`   — t        | j                  d«      d   j                  d«      d   «      S )NÚXé   ú-r   )ÚintÚsplit)Úxs    r   ú<lambda>z%_search_for_display.<locals>.<lambda>8   s'   € œC §¡¨£¨Q¡× 5Ñ 5°cÓ :¸1Ñ =Ó>€ r   é   )ÚlistÚmapr&   ÚlenÚmaxÚ_MIN_DISPLAY_NR)r!   Údisplays     r   Ú_search_for_displayr7   6   sD   € ä	ŒcÑ>ÄÃÓNÓ	O€BÜ
ˆ2„wÜ”o¤s¨2£w°¡{Ó3ˆð €Nô "ˆà€Nr   c                   ó†   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zy)ÚAbstractDisplayz8
    Common parent for X servers (Xvfb,Xephyr,Xvnc)
    c                 óˆ  — || _         || _        || _        d | _        d | _        d | _        d | _        d | _        d| _        || _	        d| _
        d | _        d| _        t        |«      }d|v | _        | j                  st        j!                  d«       t"        j$                  j'                  d«      }|r0t        j!                  d|«       t)        t+        |«      «      | _        nt-        «       rd| _        | j/                  |«       |r(t1        j2                  «       st1        j4                  «       ‚|| _        d | _        d | _        y )NFr   z
-displayfdz-displayfd flag is missing.ÚPYVIRTUALDISPLAY_DISPLAYFDzPYVIRTUALDISPLAY_DISPLAYFD=%s)Ú_extra_argsÚ_retriesÚ_programÚstdoutÚstderrÚold_display_varÚ_subprocr6   Ú_is_startedÚ_manage_global_envÚ_reset_global_envÚ	_pipe_wfdÚ_retries_currentr   Ú_has_displayfdr   Údebugr   ÚenvironÚgetÚboolr,   r   Ú_check_flagsr   Úis_installedÚNotFoundErrorÚ
_use_xauthÚ
_old_xauthÚ_xauth_filename)ÚselfÚprogramÚ	use_xauthÚretriesÚ
extra_argsÚmanage_global_envÚhelptextr;   s           r   Ú__init__zAbstractDisplay.__init__F   s  € Ø%ˆÔØˆŒØˆŒØˆŒØˆŒØ#ˆÔØˆŒØˆŒØ ˆÔØ"3ˆÔØ!&ˆÔØˆŒØ !ˆÔä Ó(ˆØ*¨hÐ6ˆÔØ×"Ò"Ü�I‰IÐ3Ô4Ü%'§Z¡Z§^¡^Ð4PÓ%QÐ"Ù%Ü�I‰IÐ5Ð7QÔRä"&¤sÐ+EÓ'FÓ"GˆDÕô Ô Ø&+�Ô#à×Ñ˜(Ô#áœU×/Ñ/Ô1Ü×%Ñ%Ó'Ð'à#ˆŒØˆŒØ#ˆÕr   c                  ó   — y ©Nr   )rS   rY   s     r   rM   zAbstractDisplay._check_flagsl   s   € Ør   c                 ó   — t        «       ‚r\   )ÚNotImplementedError©rS   s    r   Ú_cmdzAbstractDisplay._cmdo   s   € Ü!Ó#Ð#r   c                 ó&  — |r| j                   n| j                  }|€(t        j                  d«       	 t        j
                  d= yt        j                  d|«       |t        j
                  d<   y# t        $ r t        j                  d«       Y yw xY w)z”
        on:
         * True -> set $DISPLAY to virtual screen
         * False -> set $DISPLAY to original screen

        :param on: bool
        Nzunset $DISPLAYÚDISPLAYz$DISPLAY was already unset.zset $DISPLAY=%s)Únew_display_varrA   r   rI   r   rJ   ÚKeyErrorr   )rS   ÚonÚds      r   Ú_redirect_displayz!AbstractDisplay._redirect_displayr   sy   € ñ %'ˆD× Ò ¨D×,@Ñ,@ˆØˆ9Ü�I‰IÐ&Ô'ð;Ü—J‘J˜yÑ)ô �I‰IÐ'¨Ô+Ø$%ŒB�J‰J�yÒ!øô	 ò ;Ü—‘Ð9Ö:ð;ús   ³A/ Á/BÂBc                 ó`   — t         j                  j                  «       }| j                  |d<   |S )Nrb   )r   rJ   Úcopyrc   )rS   Úenvs     r   Ú_envzAbstractDisplay._env…   s&   € Ü�j‰j�o‰oÓˆØ×-Ñ-ˆˆI‰Øˆ
r   c                 óò  — | j                   rt        | d«      ‚d| _         | j                  r| j                  «        nd}	 |dz   | _        	 | j                  «        	 | j                  r| j                  d«       d| _        y	y	# t        $ rj t        j                  d|dz   «       t        j                  d«       |dz  }|| j                  k\  r%t        d| j                  ›d| j                  ›�«      ‚Y nw xY wŒ¹)
z5
        start display

        :rtype: self
        zDisplay was started twice.Tr   r*   zstart failed %sçš™™™™™©?zNo success after z retries. Last stderr: N)rC   r   rH   Ú_start1_has_displayfdrG   Ú_start1r   r   ÚtimeÚsleepr=   r@   rD   rg   rE   )rS   Úis     r   ÚstartzAbstractDisplay.startŠ   sñ   € ð ×ÒÜ˜dÐ$@ÓAÐAØˆÔà×ÒØ×&Ñ&Õ(àˆAØØ()¨A©�Ô%ðØ—L‘L”NØð ×"Ò"Ø×"Ñ" 4Ô(Ø%)ˆDÕ"ð #øô #ò Ü—K‘KÐ 1°1°q±5Ô9Ü—J‘J˜tÔ$Ø˜‘F�AØ˜DŸM™MÒ)Ý)à#Ÿ}›}¨d¯kªkð;óð ñ *ð	úð s   ÁB ÂA0C5Ã4C5c                 óh  — t         5  |rQt        j                  | j                  | j                  gt        j
                  t        j
                  d¬«      | _        nDt        j                  | j                  t        j
                  t        j
                  d¬«      | _        d d d «       y # 1 sw Y   y xY w)NF)Úpass_fdsr?   r@   Úshell)r?   r@   rv   )Ú_mutex_popenÚ
subprocessÚPopenÚ_commandrF   ÚPIPErB   )rS   Úuse_pass_fdss     r   Ú_popenzAbstractDisplay._popenª   s}   € Üñ 	ÙÜ *× 0Ñ 0Ø—M‘MØ"Ÿn™nÐ-Ü%Ÿ?™?Ü%Ÿ?™?Øô!�•ô !+× 0Ñ 0Ø—M‘MÜ%Ÿ?™?Ü%Ÿ?™?Øô	!�”÷	÷ 	ñ 	ús   ‡BB(Â(B1c                 óF  — t        j                  «       \  }| _        | j                  «       | j                  z   | _        t        j                  d| j
                  «       | j                  d¬«       t        | j                  |«      «      | _        t        j                  |«       t        j                  | j                  «       dt        | j                  «      z  | _        | j                  r| j                  «        t         j                   j#                  dd «      | _        y )Núcommand: %sT©r|   ú:%srb   )r   ÚpiperF   r`   r<   rz   r   rI   r}   r,   Ú_wait_for_pipe_textr6   Úcloserc   rP   Ú_setup_xauthrJ   rK   rA   )rS   Úrfds     r   rn   z%AbstractDisplay._start1_has_displayfd¼   sÀ   € ä Ÿg™g›iÑˆˆTŒ^àŸ	™	› d×&6Ñ&6Ñ6ˆŒÜ�	‰	�- §¡Ô/à�‰ ˆÔ&ä˜4×3Ñ3°CÓ8Ó9ˆŒÜ
�‰�ŒÜ
�‰�—‘Ô à$¤s¨4¯<©<Ó'8Ñ8ˆÔà�?Š?Ø×ÑÔô  "Ÿz™zŸ~™~¨i¸Ó>ˆÕr   c                 óð  — t         5  t        «       | _        | j                  t        v r(| xj                  dz  c_        | j                  t        v rŒ(dt	        | j                  «      z  | _        t        j                  | j                  «       d d d «       | j                  «       | j                  z   | _	        t        j                  d| j                  «       | j                  d¬«       dt	        | j                  «      z  | _        | j                  r| j                  «        t        j                   j#                  dd «      | _        t'        j&                  «       }| j
                  }d}t'        j(                  d«       	 | j+                  «       sn½	 t-        j.                  d	g| j1                  «       t,        j2                  t,        j2                  d¬
«      }|j5                  «       \  }}|j6                  }|dk7  rnt        j?                  d|«       d}n9t'        j&                  «       |z
  t@        k\  rnt'        j(                  tB        «       ŒÎ| j+                  «       s0t        j;                  d| jD                  «       d}tG        || z  «      ‚|sd}tI        ||jD                  fz  «      ‚y # 1 sw Y   �Œ!xY w# t8        $ r3 t        j;                  d«       t'        j(                  t<        «       d}Y Œ§w xY w)Nr*   r�   r   Fr€   rb   rm   TÚxdpyinfo)rj   r?   r@   rv   zLxdpyinfo was not found, X start can not be checked! Please install xdpyinfo!r   z)Successfully started X with display "%s".zprocess exited early. stderr:%szFailed to start process: %szGFailed to start X on display "%s" (xdpyinfo check failed, stderr:[%s]).)%Ú_mutexr7   r6   Ú_USED_DISPLAY_NR_LISTr,   rc   Úappendr`   r<   rz   r   rI   r}   rP   r…   r   rJ   rK   rA   rp   rq   Úis_aliverx   ry   rk   r{   ÚcommunicateÚ
returncoder   r   Ú_X_START_WAITÚinfoÚ_X_START_TIMEOUTÚ_X_START_TIME_STEPr@   r   r
   )rS   Ú
start_timerf   Úokrˆ   Ú_Ú	exit_codeÚmsgs           r   ro   zAbstractDisplay._start1Ò   sZ  € Üñ 	7Ü.Ó0ˆDŒLØ—,‘,Ô"7Ñ7Ø—’ Ñ!•ð —,‘,Ô"7Ò7à#(¬3¨t¯|©|Ó+<Ñ#<ˆDÔ ä!×(Ñ(¨¯©Ô6÷	7ð Ÿ	™	› d×&6Ñ&6Ñ6ˆŒÜ�	‰	�- §¡Ô/à�‰ ˆÔ'à$¤s¨4¯<©<Ó'8Ñ8ˆÔà�?Š?Ø×ÑÔô  "Ÿz™zŸ~™~¨i¸Ó>ˆÔô —Y‘Y“[ˆ
à× Ñ ˆØˆÜ�
‰
�4ÔØØ—=‘=”?ØðÜ%×+Ñ+Ø�LØŸ	™	›Ü%Ÿ?™?Ü%Ÿ?™?Øô�ð  ×+Ñ+Ó-‘��1Ø$×/Ñ/�	ð* ˜AŠ~Øä—‘ÐDÀaÔHØ�Øä�y‰y‹{˜ZÑ'Ô+;Ò;ØÜ�J‰JÔ)Ô*ðW ðX �}‰}ŒÜ�K‰KÐ9¸4¿;¹;ÔGØ/ˆCÜ˜c D™jÓ)Ð)ÙØ[ˆCÜ$ S¨A¨x¯©Ð+?Ñ%?Ó@Ð@ð ÷Y	7ñ 	7ûôT %ò Ü—‘Øbôô —
‘
œ=Ô)Ø�Ùðús%   ‡A	J,Á<J,ÆA$J9 Ê,J6Ê99K5Ë4K5c                 óØ  — d}t        j                   «       }	 t        j                  |gg g d«      \  }}}| j                  «       s1t        | j                  ›d| j
                  ›d| j                  ›�«      ‚||v r2t        j                  |d«      }|dk(  r	 |S ||j                  d«      z  }t        j                   «       |z
  dk\  r%t        d	| j                  ›d
| j
                  ›�«      ‚ŒÔ)NÚ r   z program closed. command: z	 stderr: r*   ó   
ÚasciiiX  zNo reply from program z
. command:)rp   ÚselectrŒ   r   r>   rz   r@   r   ÚreadÚdecoder
   )rS   r†   Úsr“   Úrfd_changed_lsr•   Úcs          r   rƒ   z#AbstractDisplay._wait_for_pipe_text#  sÜ   € ØˆÜ—Y‘Y“[ˆ
ØÜ%+§]¡]°C°5¸"¸bÀ#Ó%FÑ"ˆ^˜Q Ø—=‘=”?Ü!à—}“} d§m£m°T·[²[ðBóð ð �nÑ$Ü—G‘G˜C “O�Ø˜’:Øð ˆð �Q—X‘X˜gÓ&Ñ&�ô �y‰y‹{˜ZÑ'¨3Ò.Ý(ð Ÿ›ØŸšðóð ð r   c                 ó¨  — | j                   st        d«      ‚| j                  r| j                  d«       | j	                  «       rE	 | j
                  j                  «        | j
                  j                  «        | j                  «        | j                  r| j                  «        | S # t        $ r }t        j                  d|«       Y d}~Œld}~ww xY w)z4
        stop display

        :rtype: self
        z stop() is called before start().Fzexception in terminate:%sN)rC   r   rE   rg   rŒ   rB   ÚkillÚOSErrorr   rI   ÚwaitÚ_read_stdout_stderrrP   Ú_clear_xauth)rS   Úoserrors     r   ÚstopzAbstractDisplay.stop>  s«   € ð ×ÒÜÐ@ÓAÐAà×!Ò!Ø×"Ñ" 5Ô)à�=‰=Œ?ð@Ø—‘×"Ñ"Ô$ð �M‰M×ÑÔ Ø×$Ñ$Ô&Ø�?Š?Ø×ÑÔØˆøô ò @Ü—	‘	Ð5°w×?Ñ?ûð@ús   ÁB( Â(	CÂ1CÃCc                 óì   — | j                   €h| j                  j                  «       \  | _         | _        t        j                  d| j                   «       t        j                  d| j                  «       y y )Nz	stdout=%sz	stderr=%s)r?   rB   r�   r@   r   rI   r_   s    r   r¦   z#AbstractDisplay._read_stdout_stderrV  sP   € Ø�;‰;ÐØ)-¯©×)BÑ)BÓ)DÑ&ˆTŒ[˜$œ+ä�I‰I�k 4§;¡;Ô/Ü�I‰I�k 4§;¡;Õ/ð	 r   c                 ó¾  — t        j                  dd¬«      \  }}|| _        t        j                  |«       i | _        t        j                  d«      | j
                  d<   t        j                  d«      | j
                  d<   |xt        j                  d<   t        j                  d<   t        j                  «       }t        j                  d| j                  d|«       y)	zU
        Set up the Xauthority file and the XAUTHORITY environment variable.
        zPyVirtualDisplay.z.Xauthority)ÚprefixÚsuffixÚAUTHFILEÚ
XAUTHORITYÚaddú.N)ÚtempfileÚmkstemprR   r   r„   rQ   ÚgetenvrJ   r   Úgenerate_mcookieÚcallrc   )rS   ÚhandleÚfilenameÚcookies       r   r…   zAbstractDisplay._setup_xauth]  s«   € ô $×+Ñ+Ø&¨}ô
Ñˆ�ð  (ˆÔÜ
�‰�ÔàˆŒÜ&(§i¡i°
Ó&;ˆ�‰˜
Ñ#Ü(*¯	©	°,Ó(?ˆ�‰˜Ñ%à<DÐDŒ�
‰
�:Ñ¤§¡¨LÑ!9Ü×'Ñ'Ó)ˆÜ�
‰
�5˜$×.Ñ.°°VÕ<r   c                 óà   — t        j                  | j                  «       dD ]C  }| j                  |   €t         j                  |= Œ$| j                  |   t         j                  |<   ŒE d| _        y)zR
        Clear the Xauthority file and restore the environment variables.
        )r®   r¯   N)r   ÚremoverR   rQ   rJ   )rS   Úvarnames     r   r§   zAbstractDisplay._clear_xautho  s`   € ô 	�	‰	�$×&Ñ&Ô'Ø1ò 	?ˆGØ�‰˜wÑ'Ð/Ü—J‘J˜wÑ'à&*§o¡o°gÑ&>”—
‘
˜7Ò#ð		?ð
 ˆ�r   c                 ó&   — | j                  «        | S )ú%used by the :keyword:`with` statement)rs   r_   s    r   Ú	__enter__zAbstractDisplay.__enter__{  s   € à�
‰
ŒØˆr   c                 ó$   — | j                  «        y)r¾   N)r©   )rS   Úexc_infos     r   Ú__exit__zAbstractDisplay.__exit__€  s   € à�	‰	�r   c                 ó|   — | j                   sy| j                   j                  «       }|�| j                  «        |d u S )NF)rB   Úpollr¦   )rS   Úrcs     r   rŒ   zAbstractDisplay.is_alive„  s9   € Ø�}Š}Øà�]‰]×ÑÓ!ˆØˆ>à×$Ñ$Ô&Ø�TˆzÐr   c                 óH   — | j                   r| j                   j                  S y)zI
        PID (:attr:`subprocess.Popen.pid`)

        :rtype: int
        N)rB   Úpidr_   s    r   rÇ   zAbstractDisplay.pid˜  s    € ð �=Š=Ø—=‘=×$Ñ$Ð$ð r   N)r   r   r   Ú__doc__rZ   rM   r`   rg   rk   rs   r}   rn   ro   rƒ   r©   r¦   r…   r§   r¿   rÂ   rŒ   ÚpropertyrÇ   r   r   r   r9   r9   A   su   „ ñò$$òLò$ò&ò&ò
*ò@ò$?ò,OAòbò6ò00ò=ò$
òò
òð( ñ%ó ñ%r   r9   )r   Úloggingr   rœ   rx   r²   rp   Ú	threadingr   Úpyvirtualdisplayr   Úpyvirtualdisplay.utilr   r   Ú	getLoggerr   r   r‰   rw   r5   rŠ   r‘   r’   r�   Ú	Exceptionr
   r   r&   r7   Úobjectr9   r   r   r   ú<module>rÑ      s“   ðÛ Û Û 	Û Û Û Û Ý å "ß ?à€g×Ñ˜Ó!€ñ 
‹€Ù‹v€ð €ØÐ àÐ ØÐ Ø€ô	˜ô 	ô	�)ô 	òòô_%�fõ _%r   