mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 07:57:27 +03:00 
			
		
		
		
	Add session type check in grabclipboard for Linux
This commit is contained in:
		
							parent
							
								
									f39f74fb82
								
							
						
					
					
						commit
						bc658e1791
					
				|  | @ -140,7 +140,24 @@ def grabclipboard(): | ||||||
|                 return BmpImagePlugin.DibImageFile(data) |                 return BmpImagePlugin.DibImageFile(data) | ||||||
|         return None |         return None | ||||||
|     else: |     else: | ||||||
|         if shutil.which("wl-paste"): |         if shutil.which("loginctl"): | ||||||
|  |             try: | ||||||
|  |                 loginctl = subprocess.check_output("loginctl").decode().split("\n") | ||||||
|  |             except subprocess.CalledProcessError: | ||||||
|  |                 loginctl = None | ||||||
|  |         else: | ||||||
|  |             loginctl =  None | ||||||
|  | 
 | ||||||
|  |         if loginctl is not None: | ||||||
|  |             username = subprocess.check_output("whoami").decode().strip("\n") | ||||||
|  |             sessionid = [line.split()[0] for line in loginctl if username in line.split()][0] | ||||||
|  |             sessiontype = subprocess.check_output( | ||||||
|  |                 ["loginctl", "show-session", sessionid, "-p", "Type"] | ||||||
|  |                 ).decode().strip("\n").split("=")[1] | ||||||
|  |         else: # Session type check failed | ||||||
|  |             sessiontype = None | ||||||
|  | 
 | ||||||
|  |         if shutil.which("wl-paste") and ((sessiontype == "wayland") or (sessiontype is None)): | ||||||
|             output = subprocess.check_output(["wl-paste", "-l"]).decode() |             output = subprocess.check_output(["wl-paste", "-l"]).decode() | ||||||
|             mimetypes = output.splitlines() |             mimetypes = output.splitlines() | ||||||
|             if "image/png" in mimetypes: |             if "image/png" in mimetypes: | ||||||
|  | @ -153,11 +170,12 @@ def grabclipboard(): | ||||||
|             args = ["wl-paste"] |             args = ["wl-paste"] | ||||||
|             if mimetype: |             if mimetype: | ||||||
|                 args.extend(["-t", mimetype]) |                 args.extend(["-t", mimetype]) | ||||||
|         elif shutil.which("xclip"): |         elif shutil.which("xclip") and ((sessiontype == "x11") or (sessiontype is None)): | ||||||
|             args = ["xclip", "-selection", "clipboard", "-t", "image/png", "-o"] |             args = ["xclip", "-selection", "clipboard", "-t", "image/png", "-o"] | ||||||
|         else: |         else: | ||||||
|             msg = "wl-paste or xclip is required for ImageGrab.grabclipboard() on Linux" |             msg = "wl-paste or xclip is required for ImageGrab.grabclipboard() on Linux" | ||||||
|             raise NotImplementedError(msg) |             raise NotImplementedError(msg) | ||||||
|  | 
 | ||||||
|         p = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |         p = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | ||||||
|         err = p.stderr |         err = p.stderr | ||||||
|         if err: |         if err: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user