mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-26 18:06:18 +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