Add ipc method to invoke keybinds

e.g. create gnome keybind with following command:
`bash -c 'echo run-shortcut:toggleMute | nc -U $XDG_RUNTIME_DIR/vesktop.sock'`
This commit is contained in:
Vendicated
2026-04-05 06:08:03 +02:00
parent cf3667c151
commit 9d7ca67606
3 changed files with 63 additions and 2 deletions
-2
View File
@@ -52,8 +52,6 @@ const options = {
"toggleMute",
"toggleDeafen",
"toggleStreamerMode",
"toggleCamera",
"toggleScreenShare",
"disconnectFromVoiceChannel"
] satisfies Array<ShortcutAction>
}
+2
View File
@@ -18,6 +18,7 @@ import { CommandLine } from "./cli";
import { DATA_DIR } from "./constants";
import { createFirstLaunchTour } from "./firstLaunch";
import { sendRendererCommand } from "./ipcCommands";
import { initSocket } from "./ipcSocket";
import { registerKeyBinds } from "./keyBinds";
import { createWindows, mainWin } from "./mainWindow";
import { registerMediaPermissionsHandler } from "./mediaPermissions";
@@ -124,6 +125,7 @@ function init() {
registerScreenShareHandler();
registerMediaPermissionsHandler();
registerKeyBinds();
initSocket();
bootstrap();
+61
View File
@@ -0,0 +1,61 @@
/*
* Vesktop, a desktop app aiming to give you a snappier Discord Experience
* Copyright (c) 2026 Vendicated and Vesktop contributors
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import { app } from "electron";
import { rmSync } from "fs";
import { rm } from "fs/promises";
import { createServer, Server } from "net";
import { join } from "path";
import { IpcCommands } from "shared/IpcEvents";
import { sendRendererCommand } from "./ipcCommands";
const { env, platform } = process;
let server: Server;
const SOCKET_PATH =
platform === "win32"
? "\\\\?\\pipe\\vesktop.sock"
: join(env.XDG_RUNTIME_DIR || env.TMPDIR || env.TMP || env.TEMP || "/tmp", "vesktop.sock");
export async function initSocket() {
await rm(SOCKET_PATH, { force: true });
server = createServer(socket => {
socket.setEncoding("utf-8");
const reply = (message: string) => {
socket.write(message);
socket.end();
};
socket.on("data", async (data: string) => {
try {
const [command, ...args] = data.trim().split(":");
if (command === "run-shortcut") {
await sendRendererCommand(IpcCommands.KEY_BINDS_HANDLE, args[0]);
return;
}
reply("Unknown Command");
} catch (e) {
reply("Unknown Error");
}
});
});
server.listen(SOCKET_PATH);
server.on("error", err => {
console.error("Vesktop IPC Socket Error:", err);
});
}
app.on("will-quit", () => {
server?.close();
rmSync(SOCKET_PATH, { force: true });
});