teams-for-linux
teams-for-linux copied to clipboard
Custom background images?
Hello. I'm using your teams-for-linux client again after switching to the "official" client for a couple of years. With the recent news about Microsoft killing off the Linux client, was delighted to see that this project was still going strong, and even more so to learn that you're supporting background blur and images and various other features Microsoft apparently couldn't be bothered to support themselves on Linux. Very much appreciate what you've been doing here.
I'm trying to add a custom background image. My understanding from some basic searching is that there's supposed to be an Add Image option in the background image selector, but I don't seem to have that. Honestly not sure if this is a bug, known limitation, or if I'm just missing something since I've never done this before.
Can you please provide any guidance on whether this is supported and if so, how to use this feature? Apologies for the basic question here, but couldn't find a clear answer and not sure where else to ask. Thanks.
Are you referring to background during video calls? If so, it's already working I believe.
Adding a custom background image during video calls, yes. If that's working for you, mind sharing how to do that? I'm expecting to see some kind of Add Image link or button in the "Show background effects" pane. I have the ability to select blur and various canned images, and get the Preview and Apply options, but nothing related to adding images.
Ok, i understand now. I was referring to predefined backgrounds in the teams app. Never tried uploading image from local machine. Implementing this feature may be difficult. If it's present in web version, it could be possible here as well. I'd have it checked. Thanks.
@nitro322
Can you check in chrome?
https://support.microsoft.com/en-us/office/change-your-background-for-a-teams-meeting-f77a2381-443a-499d-825e-509a140f4780
I tested with Vivaldi (not Chrome, but uses the same engine and I've never observed any compatibility issues between it and Chrome) and get the same behavior as the electron app. You bring up a good point about the web version - I was thinking of Teams as a desktop application, but if you're essentially re-packaging the web version then I could see where that feature wouldn't be supported. Checking the link you sent, for example, shows instructions for desktop and mobile clients, but not web.
So, looks like this may not be supported after all. Bummer, but not a big deal. Appreciate the dialog. Feel free to close this if you agree this isn't supported with the web app.
It's sort of hidden. You can use the teams-for-linux app itself.
- Start a call
- Click on ...
- Show background effects
- There you go.
Right, I can find that part. I'm talking about custom images. Ie., this (from that same microsoft link you posted above):
You can also replace your background with one of the images provided, or with one of your own choosing. To use an image of your own, select Add new and then select one to upload from your computer. Make sure it's a .JPG, .PNG, or .BMP file.
That "Add new" option doesn't exist for me.
Oh, I see. Have you had used the feature on the destop for linux or have you used windows or mac version?
It didn't exist in the Linux client. No background effects options existed. No, I've never used the Windows or Mac version, hence my general uncertainty in the OP as I've never actually used this feature myself before. But many of my work colleagues have used it, so I know it works under the right conditions. Seems like those conditions exclude the web client, unfortunately.
Right, I see the images are dynamically loaded from a CDN. We might be able to do some hacks to achieve.
For example: https://static.cdn.microsoft.com/image1 request can be locally served using a different image. By faking the response and make the logic believe that it actually came from a web server. We can experiment.
Hi there @jijojosephk, I really hope there is something we could do. Is there could you possibly point me to what specific URL I can overwrite to fake the images? I see the above DNS does not actually exist.
@malanvaneck that was just a url I added while writing comment. Not an actual one.
Preview: https://statics.teams.cdn.office.net/evergreen-assets/backgroundimages/teamsBackgroundContemporaryOffice03_thumb.png?v=0.1
Background: https://statics.teams.cdn.office.net/evergreen-assets/backgroundimages/teamsBackgroundContemporaryOffice03.png?v=0.1
Thanks @jijojosephk
Actually faking the URL locally will be a problem as its an HTTPS request:
[19537:1011/141457.927329:ERROR:ssl_client_socket_impl.cc(983)] handshake failed; returned -1, SSL error code 1, net_error -202 [ERROR] Unknown cert issuer for url: https://statics.teams.cdn.office.net/evergreen-assets/backgroundimages/fluentSpaces4.png?v=0.1 [ERROR] Issuer Name: Internet Widgits Pty Ltd [ERROR] The unknown certificate fingerprint is: sha256/qF4veWeE4gVPvPp+5bV0ACX4JxChH39nMhTy+in7s3Q=
Apologies, only just now saw the --customCACertsFingerprints option. Got around the cert issues like this: teams-for-linux --customCACertsFingerprints sha256/dRZpQs2cfMlKCdkKOMvGNHASikwm0WmHRtIhEypr880=
Images are not successfully being pulled from my mini python server: 127.0.0.1 - - [11/Oct/2022 16:49:08] "OPTIONS /evergreen-assets/backgroundimages/teamsBackgroundContemporaryOffice01.png?v=0.1 HTTP/1.1" 200 - 127.0.0.1 - - [11/Oct/2022 16:49:08] "GET /evergreen-assets/backgroundimages/teamsBackgroundContemporaryOffice01.png?v=0.1 HTTP/1.1" 200 - 127.0.0.1 - - [11/Oct/2022 16:49:08] "OPTIONS /evergreen-assets/backgroundimages/teamsBackgroundContemporaryOffice01.png?v=0.1 HTTP/1.1" 200 - 127.0.0.1 - - [11/Oct/2022 16:49:08] "GET /evergreen-assets/backgroundimages/teamsBackgroundContemporaryOffice01.png?v=0.1 HTTP/1.1" 200 -
But black image on teams-for-linux
@malanvaneck I think you're pretty close. I also get black background. You're not changing the protocol or scheme. You might be stuck in CORS issue. What do you see in the debugger?
I took a slightly different route. Looks like the approach I'm taking requires some help from electron dev I guess. I left a comment in bug here
What I tried is below with response ERR_UNKNOWN_URL_SCHEME
// In the main file
protocol.registerSchemesAsPrivileged([
{
scheme: 'atom',
privileges: {
bypassCSP: true,
corsEnabled: true,
secure: true,
standard: true,
supportFetchAPI: true
}
}
]);
// When app is ready
protocol.registerHttpProtocol('atom', (request, callback) => {
request.url = path.join(__dirname, '../assets/bg/bg1.png');
callback(request);
});
// Before request
window.webContents.session.webRequest.onBeforeRequest({ urls: ['https://*/*'] }, (details, callback) => {
if (details.url === 'https://mywebsite.com/bg/bg1.png') {
callback({
redirectURL: 'atom://bg1.png'
});
} else {
// Proceed normally
callback({});
}
});
net::ERR_UNKNOWN_URL_SCHEME
Hi there @jijojosephk, I see these errors in the logs: 41818:1012/093045.034783:ERROR:ssl_client_socket_impl.cc(983)] handshake failed; returned -1, SSL error code 1, net_error -202
Also, I have noticed that overwriting the statics.teams.cdn.office.net DNS name to point to local causes Teams to sometimes be unresponsive.
Hello, I'm extremely interested in this feature. I reboot to the other partition literally only to switch on the company-required background for departmental calls and all the rest of the time I'm peacefully in Linux reading chat. With the previous official client I can confirm it was impossible to switch the background, but for the Windows client it was fairly straightforward to add a custom bg.
Where are the default backgrounds stored? Perhaps one of them could be overwritten?
@Xisiqomelir They're not stored locally, served from a MS CDN. I tried to fake the response from a local file but did not succeed. 32253 seems to be blocker from electron framework.
Ahh that’s typically M$ and very annoying.
In any case, thanks for your work in keeping the client alive especially this year that they’re trying to kill it.
@jijojosephk It works if you serve the image via https with an Access-Control-Allow-Origin
header (just setting it to *
worked). Redirecting to a data:
url might also work.
@cpfeiffer Could you tell us how exactly this can be used?
What code do we need given that we have a URL of a custom background picture? And where do we need to put that code?
Speaking as a user of teams-for-linux, not a developer.
I tried a data URL (that's some Cat Picutre)
window.webContents.session.webRequest.onBeforeRequest({ urls: ['https://*/*'] }, (details, callback) => {
if (details.url === 'https://statics.teams.cdn.office.net/evergreen-assets/backgroundimages/teamsBackgroundContemporaryOffice03.png?v=0.1') {
callback({
redirectURL: 'data:image/png;base64,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'
});
} else {
// Proceed normally
callback({});
}
});
But I am getting
Uncaught TypeError: Cannot read properties of undefined (reading 'session')
at <anonymous>:1:20
(I tried this in the dev tools )
EDIT: tried inserting it into onBeforeRequestHandler / app/mainAppWindow/index.js:135
UNSAFE_REDIRECT .. happens also for data urls
@amenk UNSAFE_REDIRECT : Maybe you need to add the Access-Control-Allow-Origin: *
header
Not sure how... I found this https://stackoverflow.com/a/52243138/956397
I tried a lot with CORS and the request but it all caused UNSAFE_REDIRECTS or made everything stop working.
But now I found another way to change the background to a custom one, using the debugger.
- Search for the function configureEffect
- Open a new meeting in a channel
- Click any of the built-in backgrounds
- Code should stop now at that function
- Paste
A.backgroundImageUrl = "data: ....."
with your image into the console, press enter (probably a hosted image works as well?) - Continue the code
The custom image should show in the preview and I tested that it is also visible to the other party in a call.
Unfortunately that custom background is not preserved after restarts.
The other question is if this can be made usable in a nice way - i.e. is the Electron app able to inject / patch Javascript code?
@DerXteMensch Sorry, this is nothing for end-users, yet. I was merely trying to check if it works at all, because all previous attempts in this thread appeared to have been unsuccessful. All I did was patch the onBeforeRequestHandler()
, check the URL for one of the default background images and redirect to a custom image of my own. The only "special" thing I had to do was return the Access-Control-Allow-Origin: *
policy from my custom server.
To make this usable for end-users, one would
- allow configuring a server-URL hosting custom background images and the appropriate json file so that the images can be listed in the UI
- or find a way to host them locally, with or without TLS
- add the redirect in the
onBeforeRequestHandler()
to the server-URL or locally hosted service
Well I have something interesting :smile: Once the page is loaded. Open debug->console and execute the script below.
Replace args[0]=<daturl>
with base64 converted image of your choice. You may use https://www.base64-image.de/ to convert.
Click calendar Meet Now Select background effect Click any image
May be we're very close :smile:
const controller = typeof window.angular !== 'undefined' ? window.angular.element(document.documentElement).controller() : null;
const x = controller.callingService._deviceManagerService.setBackgroundImageOnDevice;
controller.callingService._deviceManagerService.setBackgroundImageOnDevice = (...args) => {
args[0] = '<daturl>'; x.apply(controller.callingService._deviceManagerService, [...args]);
};
@amenk @cpfeiffer try the above.
@jijojosephk Seems to work pretty well. It replaces all the in-built images with the custom one. Draft pull request incoming ...
Breakthrough :tada: Now I need to stitch everything together as a feature. Hooray!
The car image is hosted in apache. So we need to have a light weight web server starting with application at a custom port. Then things are pretty doable.
https://user-images.githubusercontent.com/11662148/236913080-4f5ee054-bf76-431b-a17f-511a24643ada.mp4
@nitro322 @malanvaneck @Xisiqomelir @cpfeiffer @DerXteMensch @amenk @kw-pr try 1.0.84
pre-release. Read https://github.com/IsmaelMartinez/teams-for-linux/tree/develop/app/config