рдЖрдиреЗ рд╡рд╛рд▓реЗ рдИрдореЗрд▓ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдкрд▓рдХ рд╕реНрдХреНрд░реЙрд▓ рд▓реЙрдХ (рдкрд░реНрд▓ + рдмреИрд╢)

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд

рдЙрджреНрджреЗрд╢реНрдп: рд╣рдорд╛рд░реЗ рдЗрдирдмреЙрдХреНрд╕ рдореЗрдВ рдирдП рдЕрдкрдард┐рдд рд╕рдВрджреЗрд╢ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреАрдмреЛрд░реНрдб рдПрд▓рдИрдбреА рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╕реАрдЦреЗрдВред

рдЕрддрд┐рд░рд┐рдХреНрддред рд╢рд░реНрддреЗрдВ: OS - linux, рднрд╛рд╖рд╛ - perl (рдореЗрд▓ рдЪреЗрдХ) рдФрд░ bash (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреНрд▓рд┐рдВрдХрд┐рдВрдЧ)ред



рджрд░рдЕрд╕рд▓, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рд╖рдп рдореЗрдВ рд╕рд▓рд╛рд╣ рджреА рдереА, рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
  1. рдбрд╛рдпреЛрдб рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╕реАрдЦреЗрдВ
  2. рдирдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд▓ рдЪреЗрдХ рдХрд░рдирд╛ рд╕реАрдЦреЗрдВ
  3. рджреЛрдиреЛрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдорд┐рддреНрд░ рдмрдирд╛рдУ


рдбрд╛рдпреЛрдб рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╕реАрдЦрдирд╛

рдПрдХ рд▓реЗрдбрдХрдВрдЯреНрд░реЛрд▓ рдбреЗрдореЙрди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ xx рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрд╕рд░ рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд░реВрдВрдЧрд╛
#!/bin/bash trap 'xset -led named "Scroll Lock"; exit ' SIGINT SIGTERM while(true); do xset led named "Scroll Lock" ; sleep 0.05 ; xset -led named "Scroll Lock"; sleep 0.05; done 

рдЗрд╕ рдХреЛрдб рдХреЛ рдПрдХ beepScroll рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдерд╛, рдлрд╝рд╛рдЗрд▓ рдХреЛ $ PATH рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдЕрдзрд┐рдХрд╛рд░ рджрд┐рдП рдЧрдП рдереЗред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрд▓рдИрдбреА рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред
рдирдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд▓ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рд╕реАрдЦрдирд╛

 sub mymail(){ use Mail::IMAPClient; use IO::Socket::SSL; while (42){ my $user = 'login'; my $server = 'server.ltd'; my $pass = 'P@ssw0rd'; my $socket = IO::Socket::SSL->new( PeerAddr => $server, PeerPort => 993, ) or die "socket(): $@"; my $imap = Mail::IMAPClient->new( Socket => $socket, Server => $server, User => $user, Password => $pass, Debug => 0) or die "Cannot connect to $server as $user: $@"; my $not_read; foreach my $f ($imap->folders) { my $i = $imap->unseen_count($f)||0 ; $not_read += $i; } $imap->logout(); print $not_read; } } 

рдпрд╣рд╛рдВ рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдореЗрд▓ :: IMAPClient рдорд╛рдирдХ рд╡рд┐рддрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА) рдФрд░ рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рдЪрд▓рд╛рдПрдВ рдЬреЛ 1) рд╕рд░реНрд╡рд░ рд╕реЗ рдЗрдореИрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЗрдирдмреЗрд░реЛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЕрдкрдард┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИ, рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдорд┐рдирдЯ рдФрд░ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рд╣рдо рд╕рдм рд╕рд╛рде рд╣реИрдВ

рдпрд╣рд╛рдБ рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╣рдо 2 рдзрд╛рдЧреЗ рдЪрд▓рд╛рдПрдВрдЧреЗред рдкрд╣рд▓реЗ рдореЗрд▓ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рдмрд┐рдирд╛ рдкрдврд╝реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреЗрдЬреЗрдЧрд╛ред рджреВрд╕рд░реЗ рдХреЛ рдХрд░реНрд╕рд░ рд╕реЗ рдмреНрд▓рд┐рдВрдХрд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╢реБрд░реВ / рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред
рддреЛ:
 #!/usr/bin/perl #   use strict; use threads; #  use Thread::Queue; #       my $mypipe = Thread::Queue->new; #  #    threads->create(\&mymail); #   threads->create(\&myleds)->join; #     

рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рдЕрдВрдд рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
Myleds рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рд╕реНрд╡рдпрдВ:
 sub myleds(){ my $beep = 0; #1     . my $mypid; # pid ,   while($_ = $mypipe->dequeue){ #     if ($_ > 1){ if ($beep == 0){ $mypid = `nohup beepScroll > /dev/null 2>&1 &echo \$!`; #     pid'   $beep = 1; } } else { `kill $mypid` if $mypid; #    ,      . $mypid = 0 if $mypid; $beep = 0; } } } 
, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ mymail () рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
 prinr $not_read 
рдкрд░
 $mypipe->enqueue($not_read+1) 
"$ not_read + 1" рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ 0 рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╢рд░реНрддреЛрдВ рдХреЛ рдЧрд▓рдд рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг
 #!/usr/bin/perl use strict; use threads; use Thread::Queue; my $mypipe = Thread::Queue->new; threads->create(\&mymail); threads->create(\&myleds)->join; sub mymail(){ use Mail::IMAPClient; use IO::Socket::SSL; while (42){ my $user = 'login'; my $server = 'server.ltd'; my $pass = 'P@ssw0rd'; my $socket = IO::Socket::SSL->new( PeerAddr => $server, PeerPort => 993, ) or die "socket(): $@"; my $imap = Mail::IMAPClient->new( Socket => $socket, Server => $server, User => $user, Password => $pass, Debug => 0) or die "Cannot connect to $server as $user: $@"; my $not_read; foreach my $f ($imap->folders) { my $i = $imap->unseen_count($f)||0 ; $not_read += $i; } $imap->logout(); $mypipe->enqueue($not_read+1); sleep 60; } #     ...     :) $mypipe->enqueue(undef); exit 1; } sub myleds(){ my $beep = 0; my $mypid; while($_ = $mypipe->dequeue){ if ($_ > 1){ if ($beep == 0){ $mypid = `nohup beepScroll > /dev/null 2>&1 &echo \$!`; $beep = 1; } } else { $beep = 0; `kill $mypid` if $mypid; $mypid = 0 if $mypid; } } } 

Source: https://habr.com/ru/post/In199270/


All Articles