Closed nitro322 closed 1 year ago
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?
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.
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.
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.
A.backgroundImageUrl = "data: ....."
with your image into the console, press enter (probably a hosted image works as well?)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
onBeforeRequestHandler()
to the server-URL or locally hosted serviceWell 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.
@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
It seems to work, really great!
But I have some annotations:
My custom_bg.json:
[
{
"filetype": "jpg",
"id": "Custom_bg01",
"name": "Regatta",
"src": "/teams-for-linux/custom-bg/regatta.jpg",
"thumb_src": "/teams-for-linux/custom-bg/regatta-thumb.jpg"
}
]
results in the following apache log:
::1 - - [09/May/2023:09:05:29 +0200] "GET /regatta-thumb.jpg HTTP/1.1" 200 35755 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.199 Safari/537.36"
::1 - - [09/May/2023:09:05:34 +0200] "GET /regatta.jpg HTTP/1.1" 200 522403 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.199 Safari/537.36"
while curl http://localhost/teams-for-linux/custom-bg/regatta.jpg
gives:
::1 - - [09/May/2023:09:14:16 +0200] "GET /teams-for-linux/custom-bg/regatta.jpg HTTP/1.1" 200 522347 "-" "curl/7.74.0"
No idea, why teams-for-linux strips the path on request...
Seems that I misinterpreted the documentation. /teams-for-linux/custom-bg
in src
and and thumb_src
of the custom_bg.json
seem to be fixed strings that can not be changed, while <image-path>
is really the path (not only the filename).
So now I changed src
to "/teams-for-linux/custom-bg/teams/regatta.jpg"
and placed regatta.jpg
in directory teams
below the webserver root and everything works as expected.
@RolandRosenfeld I guess the comment you're talking about is sample in the readme. They were added for the understanding. JSON file can't have comments. Sorry if that was misleading. And for the url, what's given in the json file /teams-for-linux/custom-bg/
will be replaced withhttp://localhost
. So, /teams-for-linux/custom-bg/regatta.jpg
becomes http://localhost/regatta.jpg
Thanks so much for your effort. However it's not yet completely working for me.
I have put two jpgs into folder /var/www/html. apache2 is running. And I can view the jpgs in my browser under http://localhost/Teamshintergrund.jpg and http://localhost/Teamshintergrund_thumb.jpg. I have put a newly created custom_bg.json to /home/user/.config/teams-for-linux/custom_bg.json. The json contains:
[
{
"filetype": "jpg",
"id": "Teamshintergrund",
"name": "Teamshintergrund",
"src": "/teams-for-linux/custom-bg/Teamshintergrund.jpg",
"thumb_src": "/teams-for-linux/custom-bg/Teamshintergrund_thumb.jpg"
}
]
When I open teams-for-linux, I see the thumbnail. But when I select it, the preview remains with the beforehand selected image (see screenshot). Also when I enter the meeting, it's still the beforehand selected image, not the image from localhost.
What am I doing wrong?
Are you sure, that you enabled Access-Control-Allow-Origin: *
?
Try curl -v -s http://localhost/Teamshintergrund.jpg
, which should show it in the server headers.
Without this header I only see the thumb but not the background...
I guess I forgot to stop and restart apache2.
First I got an error while restarting:
Mai 09 17:56:18 malte-ThinkPad-X380-Yoga apachectl[50213]: AH00526: Syntax error on line 171 of /etc/apache2/apache2.conf: Mai 09 17:56:18 malte-ThinkPad-X380-Yoga apachectl[50213]: Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
This did the trick:
sudo a2enmod headers
Thanks everybody! That's really great to have custom background images working!
With right configuration mostly people find this working now. Please follow the instructions on release 1.0.84
. Closing this now.
Minor breaking change in 1.0.87
, read https://github.com/IsmaelMartinez/teams-for-linux/tree/develop/app/config#custom-backgrounds. custom_bg.json
to be moved to server.
Hi,
I can have it working with the binary download but not with Snap (1.0.88 - edge channel). Is there a limitation ? I have all permissions enabled.
@BzSpi if things are ok with native, stick with that. We don't know what issues are there with snap
. Are you using a local server or a remote one?
A local one. I can't see any request coming to the server when using snap and nothing in logs.
Can you run the app from the command line? See if there are errors.
No error in the command line output and no request have been made to the HTTP server.
$ $ teams-for-linux --appLogLevels error,warn,info,debug
configPath = /home/xxxx/.config/teams-for-linux
configFile = {
customBGServiceBaseUrl: 'http://localhost/msteams/',
minimized: true,
appLogLevels: 'debug'
}
processArgs [
'/opt/teams-for-linux/teams-for-linux',
'--appLogLevels',
'error,warn,info,debug'
]
[180740:0516/084936.761534:ERROR:browser_main_loop.cc(270)] Gtk: gtk_widget_add_accelerator: assertion 'GTK_IS_ACCEL_GROUP (accel_group)' failed
[180740:0516/084936.761664:ERROR:browser_main_loop.cc(270)] Gtk: gtk_widget_add_accelerator: assertion 'GTK_IS_ACCEL_GROUP (accel_group)' failed
[180740:0516/084936.761711:ERROR:browser_main_loop.cc(270)] Gtk: gtk_widget_add_accelerator: assertion 'GTK_IS_ACCEL_GROUP (accel_group)' failed
[180740:0516/084936.761747:ERROR:browser_main_loop.cc(270)] Gtk: gtk_widget_add_accelerator: assertion 'GTK_IS_ACCEL_GROUP (accel_group)' failed
[180740:0516/084936.761784:ERROR:browser_main_loop.cc(270)] Gtk: gtk_widget_add_accelerator: assertion 'GTK_IS_ACCEL_GROUP (accel_group)' failed
did-finish-load
did-finish-load
@BzSpi you need to open debug tools. From the tray icon menu choose debug and go to network tab. see what response you're getting for http://localhost/msteams/<your-image>
Hi @jijojosephk
My bad, I had a deb version of the application along with the snap version. I've uninstalled everything all and reinstalled the snap version and this is working file.
Sorry for the inconvenience.
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.