Steam is copying the image file itself, rather than the image data that most apps expect. I discovered this as I was able to paste the file directly to my desktop (or file manager), something you (normally) can't do with a raw image.
Steam is copying the image file itself, rather than the image data that most apps expect. I discovered this as I was able to paste the file directly to my desktop (or file manager), something you (normally) can't do with a raw image.
Its not even doing that now.
. So its no wonder nothing can read it. Only found out by accidentally pasting it in here - it won't even update in the address bar (not on LibreWolf/Firefox, anyhow). This is possibly the most bass-ackwards way of doing this that I can think of, and I don't know why they did it this way, except for making it "easier" to post on GitHub for problems.Tested in normal and beta versions of Steam.
The same for me. Every time I want to send a screenshot to someone in Discord I can't copy it. I have to open the file location, open the file via image viewer and copy the image from there. Or take a screenshot of the screenshot via OS built-in features.
I understand that steam may be doing a technically correct thing by copying the file path or whatever it does, but it does make much sense for the end user if it can't be used in most of the apps.
I can rule out this being a problem of the clipboard data itself. if you copy a screenshot (Post-Game Summary and the screenshot browser both do this) and dump the clipboard selection, Steam registers a text/uri-list clipboard target with reasonable data for that MIME type.
$ xclip -selection clipboard -o -t 'TARGETS'
TARGETS
text/uri-list
$ xclip -selection clipboard -o -t 'text/uri-list' | xxd
00000000: 6669 6c65 3a2f 2f2f 686f 6d65 2f63 6872 file:///home/chr
00000010: 6973 2f2e 7374 6561 6d2f 6465 6269 616e is/.steam/debian
00000020: 2d69 6e73 7461 6c6c 6174 696f 6e2f 7573 -installation/us
00000030: 6572 6461 7461 2f38 3934 3038 3834 392f erdata/89408849/
00000040: 3736 302f 7265 6d6f 7465 2f35 3730 3934 760/remote/57094
00000050: 302f 7363 7265 656e 7368 6f74 732f 3230 0/screenshots/20
00000060: 3236 3035 3232 3137 3137 3133 5f31 2e6a 260522171713_1.j
00000070: 7067 0d0a pg..
While Discord refuses to paste now, you can have xclip take over the selection with the same data and it pastes fine:
$ printf 'file:///home/chris/.steam/debian-installation/userdata/89408849/760/remote/570940/screenshots/20260522171713_1.jpg\r\n' | xclip -selection clipboard -i -t 'text/uri-list'
I did some testing to observe the difference between xclip and Steam. This testing was pretty low-level but maybe it'll be a useful starting point if this gets narrowed down to a specific component (my uninformed hunch says CEF).
If you want the low-level details of how X selections work then check the ICCCM. The very short version is that the X client that writes the clipboard assigns one of its windows as the owner and waits for selection events. When a client wants to read the clipboard it, it tells X the selection and data format it wants, X forwards this to the owner, and then the owner sets a property on the reader's window.
When you feed the clipboard with xclip and paste into Discord, Discord requests that selection 423 (CLIPBOARD) in the target format 513 (text/uri-list) be written to property 420 (application specific - not relevant for the clipboard owner).
X11, Request, opcode: 24 (ConvertSelection)
opcode: ConvertSelection (24)
unused
request-length: 6
requestor: 0x00600000
selection: 423 (Not a predefined atom)
target: 513 (Not a predefined atom)
property: 420 (Not a predefined atom)
time: 0 (CurrentTime)
xclip sets a property on the target window and then notifies Discord that the property has been changed. Note that the values between the request, change, and response all line up: SelectionNotify mirrors ConvertSelection, and ChangeProperty writes property 420 with format 513.
X11, Request, opcode: 18 (ChangeProperty)
opcode: ChangeProperty (18)
mode: 0 (Replace)
request-length: 35
window: 0x00600000
property: 420 (Not a predefined atom)
type: 513 (Not a predefined atom)
format: 8
unused
data-length: 116
data: 66696c653a2f2f2f...d0a
X11, Request, opcode: 25 (SendEvent)
opcode: SendEvent (25)
propagate: False
request-length: 11
destination: 6291456
event-mask: 0x00000000
event: 31 (SelectionNotify)
eventcode: 31 (SelectionNotify)
unused
event-sequencenumber: 0
time: 0 (CurrentTime)
requestor: 0x00600000
selection: 423 (Not a predefined atom)
target: 513 (Not a predefined atom)
property: 420 (Not a predefined atom)
unused
Pasting into Discord starts off the same way:
X11, Request, opcode: 24 (ConvertSelection)
opcode: ConvertSelection (24)
unused
request-length: 6
requestor: 0x00600000
selection: 423 (Not a predefined atom)
target: 513 (Not a predefined atom)
property: 420 (Not a predefined atom)
time: 0 (CurrentTime)
Steam's response is different than xclip's. While SelectionNotify mirrors ConvertSelection again, the ChangeProperty writes property 420 using format 255 (UTF8_STRING) instead of format 513 (text/uri-list).
Some clients cope with this difference but this seems wrong. A client requesting text/uri-list should know what the format means, and it's not like there's an actual conversion happening here.
X11, Request, opcode: 18 (ChangeProperty)
opcode: ChangeProperty (18)
mode: 0 (Replace)
request-length: 35
window: 0x00600000
property: 420 (Not a predefined atom)
type: 255 (Not a predefined atom)
format: 8
unused
data-length: 116
data: 66696c653a2f2f2f...0d0a
X11, Request, opcode: 25 (SendEvent)
opcode: SendEvent (25)
propagate: False
request-length: 11
destination: 6291456
event-mask: 0x00000000
event: 31 (SelectionNotify)
eventcode: 31 (SelectionNotify)
unused
event-sequencenumber: 0
time: 0 (CurrentTime)
requestor: 0x00600000
selection: 423 (Not a predefined atom)
target: 513 (Not a predefined atom)
property: 420 (Not a predefined atom)
unused
Nothing extracted yet.
Your system information
Steam client version (build number or date): 1731716808
Distribution (e.g. Ubuntu): Debian
Opted into Steam client beta?: Yes
Have you checked for system updates?: Yes
Steam Logs: steam-logs.tar.gz
GPU: AMD RX 6750 XT
Please describe your issue in as much detail as possible:
When I use "copy to clipboard" to copy image data, I expect being able to "paste" it to several applications: browsers, discord, gimp, etc. That doesn't happen. Other than Firefox browser and the LibreOffice suite, applications either claim that there's nothing on the keyboard, or in the case of GIMP that "There is no image data in the clipboard to paste". Images generated and copied to the clipboard from any of these applications is pasteable in every other application. Obviously, the Steam client is doing something wrong.
Steps for reproducing this issue: