当前位置: 主页 > CentOS入门 > 中级进介 >

CentOS下定期获取目标机器屏幕截图

时间:2016-01-29 02:15来源:blog.51cto.com 作者:fight4gold的专栏 举报 点击:

1、添加计划任务

crontab -l

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. */1 * * * * sh /home/aaron/run.sh >> /home/aaron/cron.log 2>&1  

2、cat /home/aaron/run.sh

 

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. #!/bin/sh    
  2.   
  3. #cd /home/aaron  
  4. #CLASSPATH=$CLASSPATH:/home/aaron/.gradle/cache/com.google.zxing/core/jars/core-3.2.1.jar   
  5. #CLASSPATH=$CLASSPATH:/home/aaron/.gradle/cache/com.google.zxing/javase/jars/javase-3.2.1.jar  
  6. #CLASSPATH=$CLASSPATH:/home/aaron/.gradle/cache/commons-lang/commons-lang/jars/commons-lang-2.6.jar  
  7. #CLASSPATH=$CLASSPATH:/home/aaron/.gradle/cache/joda-time/joda-time/jars/joda-time-1.6.2.jar  
  8.     
  9. #export CLASSPATH    
  10. #export DISPLAY=:0  
  11. #java=/home/aaron/soft/jdk1.8.0/bin/java    
  12. #$java com/aaron/my/resources/Test    
  13.   
  14. imageDir=/tmp/images  
  15.   
  16. pre_check(){    
  17.   if [ ! -d "$imageDir" ]; then   
  18.      mkdir -p "$imageDir"   
  19.   fi   
  20. }  
  21.   
  22. pre_check  
  23.   
  24. #commandStr="/tmp/tool/client.sh;cd $imageDir;ls"  
  25.   
  26. #ssh 目标机器host  $commandStr > t.txt  
  27.   
  28. #for  x  in  $(cat t.txt)  
  29. #do       
  30. #scp user@host:/tmp/images/$x /tmp/images  
  31. #ssh 目标机器host "rm $imageDir/$x"  
  32. #done   

3、以下放到目标机器

 

cat /tmp/tool/client.sh

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. #!/bin/sh    
  2.   
  3. imageDir=/tmp/images  
  4. baseDir=$(cd $(dirname $0);pwd)  
  5.   
  6. pre_check(){    
  7.   if [ ! -d "$imageDir" ]; then   
  8.      mkdir -p "$imageDir"   
  9.   fi   
  10. }  
  11.   
  12. pre_check  
  13.   
  14. CLASSPATH=$CLASSPATH:$baseDir/core-3.2.1.jar   
  15. CLASSPATH=$CLASSPATH:$baseDir/javase-3.2.1.jar  
  16. CLASSPATH=$CLASSPATH:$baseDir/commons-lang-2.6.jar  
  17. CLASSPATH=$CLASSPATH:$baseDir/joda-time-1.6.2.jar  
  18.     
  19. export CLASSPATH    
  20. export DISPLAY=:0  
  21. cd $baseDir  
  22. java=/home/aaron/soft/jdk1.8.0/bin/java    
  23. $java com/aaron/my/resources/Test    

 

cat Test.java 参考snapshot方法

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.aaron.my.resources;  
  2.   
  3. import java.awt.*;  
  4.   
  5. import java.awt.Dimension;  
  6.   
  7. import java.awt.image.BufferedImage;  
  8.   
  9. import java.io.File;  
  10.   
  11. import java.io.IOException;  
  12.   
  13. import java.nio.file.FileSystems;  
  14.   
  15. import java.nio.file.Path;  
  16.   
  17. import java.util.HashMap;  
  18.   
  19. import java.util.Map;  
  20.   
  21. import javax.imageio.ImageIO;  
  22.   
  23.   
  24.   
  25. import com.google.gson.Gson;  
  26.   
  27. import com.google.zxing.*;  
  28.   
  29. import com.google.zxing.client.j2se.BufferedImageLuminanceSource;  
  30.   
  31. import com.google.zxing.client.j2se.MatrixToImageWriter;  
  32.   
  33. import com.google.zxing.common.BitMatrix;  
  34.   
  35. import com.google.zxing.common.HybridBinarizer;  
  36.   
  37. import org.apache.commons.codec.binary.Base64;  
  38.   
  39. import org.apache.commons.lang.StringUtils;  
  40.   
  41. import org.joda.time.DateTime;  
  42.   
  43.   
  44.   
  45. public class Test {  
  46.   
  47.     private static final String fromDir = "/tmp/images";  
  48.   
  49.     private static final String toDir = "/mnt/shared/processedQRCodes";  
  50.   
  51.     private static final String PNG = ".png";  
  52.   
  53.     private static final int PNG_SIZE_HEIGHT = 200;  
  54.   
  55.     private static final int PNG_SIZE_WIDTH = 200;  
  56.   
  57.   
  58.   
  59.     public static void main(String[] args) {  
  60.   
  61.         snapshot();  
  62.   
  63. //        File dir = new File(fromDir);  
  64.   
  65. //        if(dir.exists() && dir.isDirectory()){  
  66.   
  67. //            File[] files = dir.listFiles();  
  68.   
  69. //            for(File f:files){  
  70.   
  71. //                if(f.isFile()&&f.getName().toLowerCase().endsWith(PNG)){  
  72.   
  73. //                    String res = decode(f);  
  74.   
  75. ////                    System.out.println(res);  
  76.   
  77. //                    if(StringUtils.isNotBlank(res)){  
  78.   
  79. //                        // move to processed dir  
  80.   
  81. //                        boolean moved = move(f,new File(toDir+File.separator+f.getName().substring(0,f.getName().indexOf("."))+"_"+res+PNG));  
  82.   
  83. //                        System.out.println(moved==true?"Moved to processed dir.":"Can't move file: "+f.getAbsolutePath());  
  84.   
  85. //                    }  
  86.   
  87. //                }  
  88.   
  89. //            }  
  90.   
  91. //        }  
  92.   
  93.         String res = decode(new File("/mnt/shared/qrcodes/b.png"));  
  94.   
  95. //        encode("http://baike.baidu.com/link?url=BP7l08ZZZa7HBLL0g4RCuVsN3BlNbuokYRKCuUk8ZexPDjxSVNMXQq_08WI1xz5EUAjVrce4qgSisos9K-mq-q");  
  96.   
  97.     }  
  98.   
  99.   
  100.   
  101.     private static boolean  move(File f,File toDir){  
  102.   
  103.         return f.renameTo(toDir);  
  104.   
  105.     }  
  106.   
  107.   
  108.   
  109.     /** 
  110.  
  111.      * 解析图像 
  112.  
  113.      */  
  114.   
  115.     public static String decode(File file) {  
  116.   
  117.         BufferedImage image;  
  118.   
  119.         String res = null;  
  120.   
  121.         try {  
  122.   
  123.             image = ImageIO.read(file);  
  124.   
  125.             LuminanceSource source = new BufferedImageLuminanceSource(image);  
  126.   
  127.             Binarizer binarizer = new HybridBinarizer(source);  
  128.   
  129.             BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);  
  130.   
  131.             Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();  
  132.   
  133. //            hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");  
  134.   
  135.             Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 对图像进行解码  
  136.   
  137.             String resultStr = result.getText();  
  138.   
  139. //            System.out.println(resultStr);  
  140.   
  141.             String t = resultStr.substring(resultStr.indexOf("?")+3,resultStr.length());  
  142.   
  143.             String base64 = new String(Base64.decodeBase64(t));  
  144.   
  145. //            System.out.println(t);  
  146.   
  147.             System.out.print(base64+"   --->   ");  
  148.   
  149.             DecodeResult decodeResult = new Gson().fromJson(base64,DecodeResult.class);  
  150.   
  151.             res = decodeResult.getD();  
  152.   
  153.         } catch (Exception e) {  
  154.   
  155.             // move to processed dir  
  156.   
  157.             boolean moved = move(file,new File(toDir+File.separator+file.getName().substring(0,file.getName().indexOf("."))+(res==null?"":"_"+res)+PNG));  
  158.   
  159.             System.out.println(moved==true?"Exception happened and moved to processed dir.":"Can't move file: "+file.getAbsolutePath());  
  160.   
  161. //            e.printStackTrace();  
  162.   
  163.         }  
  164.   
  165.         return res;  
  166.   
  167.     }  
  168.   
  169.   
  170.   
  171.     public static void snapshot(){  
  172.   
  173.         String fileName = new DateTime().toString("yyyyMMddHHmmss");  
  174.   
  175.         Dimension screensize   =   Toolkit.getDefaultToolkit().getScreenSize();  
  176.   
  177.         double h = screensize.getHeight();  
  178.   
  179.         double w = screensize.getWidth();  
  180.   
  181.         try {  
  182.   
  183.             Robot robot = new Robot();  
  184.   
  185. //            BufferedImage bi=robot.createScreenCapture(new Rectangle(Double.valueOf((w-PNG_SIZE_WIDTH)/2).intValue(),Double.valueOf((h-PNG_SIZE_HEIGHT)/2).intValue(),PNG_SIZE_WIDTH,PNG_SIZE_HEIGHT)); // 根据指定的区域抓取屏幕  
  186.   
  187.             BufferedImage bi=robot.createScreenCapture(new Rectangle(screensize)); // 根据指定的区域抓取屏幕  
  188.   
  189.             ImageIO.write(bi, "png"new File(fromDir+File.separator+fileName+PNG));  
  190.   
  191.         } catch (AWTException e) {  
  192.   
  193.             e.printStackTrace();  
  194.   
  195.         } catch (IOException e) {  
  196.   
  197.             e.printStackTrace();  
  198.   
  199.         }  
  200.   
  201.     }  
  202.   
  203.   
  204.   
  205.     public static void encode(String content){  
  206.   
  207.         int width = 400// 图像宽度  
  208.   
  209.         int height = 400// 图像高度  
  210.   
  211.         String format = "png";// 图像类型  
  212.   
  213.         Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();  
  214.   
  215.         hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");  
  216.   
  217.         try{  
  218.   
  219.             BitMatrix bitMatrix = new MultiFormatWriter().encode(content,  
  220.   
  221.                     BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵  
  222.   
  223.             Path path = FileSystems.getDefault().getPath(toDir, "code.png");  
  224.   
  225.             MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 输出图像  
  226.   
  227.         }catch(Exception e){  
  228.   
  229.             e.printStackTrace();  
  230.   
  231.         }  
  232.   
  233.     }  
  234.   
  235. }  
  236.   
  237.   
  238.   
  239. class DecodeResult{  
  240.   
  241.     private String a;  
  242.   
  243.     private String b;  
  244.   
  245.     private String c;  
  246.   
  247.     private String d;  
  248.   
  249.     private String v;  
  250.   
  251.   
  252.   
  253.     public String getA() {  
  254.   
  255.         return a;  
  256.   
  257.     }  
  258.   
  259.   
  260.   
  261.     public void setA(String a) {  
  262.   
  263.         this.a = a;  
  264.   
  265.     }  
  266.   
  267.   
  268.   
  269.     public String getB() {  
  270.   
  271.         return b;  
  272.   
  273.     }  
  274.   
  275.   
  276.   
  277.     public void setB(String b) {  
  278.   
  279.         this.b = b;  
  280.   
  281.     }  
  282.   
  283.   
  284.   
  285.     public String getC() {  
  286.   
  287.         return c;  
  288.   
  289.     }  
  290.   
  291.   
  292.   
  293.     public void setC(String c) {  
  294.   
  295.         this.c = c;  
  296.   
  297.     }  
  298.   
  299.   
  300.   
  301.     public String getD() {  
  302.   
  303.         return d;  
  304.   
  305.     }  
  306.   
  307.   
  308.   
  309.     public void setD(String d) {  
  310.   
  311.         this.d = d;  
  312.   
  313.     }  
  314.   
  315.   
  316.   
  317.     public String getV() {  
  318.   
  319.         return v;  
  320.   
  321.     }  
  322.   
  323.   
  324.   
  325.     public void setV(String v) {  
  326.   
  327.         this.v = v;  
  328.   
  329.     }  
  330.   
  331. }  

------分隔线----------------------------
发表评论
为了和诣的生活,我关闭了评论页面,请大家到QQ群里交流吧:348944156,也欢迎关注本站微信公众号:centoscn