Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added
- Added build-time GNOME extension / DBus identity overrides (`CUL_*`) so the
`codex-desktop-linux` embedded copy can share this source while keeping its
Codex extension identity, plus runtime `CODEX_COMPUTER_USE_*` aliases for the
embedded input/backend knobs.

### Fixed
- Ported downstream Linux readiness fixes: `doctor` now treats direct
`/dev/uinput` and the XDG RemoteDesktop portal as valid development-input
backends instead of requiring `ydotoold` in every ready setup.
- Ported downstream session hydration fixes for X11 launches by carrying
`XAUTHORITY` through environment hydration and checking the same-user namespace
init process when it owns the graphical session environment.

## [0.2.4] - 2026-05-25

Primarily a documentation release that refreshes the crates.io and npm README
Expand Down
14 changes: 10 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -304,10 +304,16 @@ Most setups need none of these — `doctor` and the installers pick sensible def

| Variable | Effect |
| --- | --- |
| `COMPUTER_USE_LINUX_COSMIC_HELPER` | Path to the `computer-use-linux-cosmic` helper when it isn't next to the binary or on `PATH`. |
| `CU_DISABLE_ABS_POINTER` | Disable the uinput absolute pointer and click through `ydotool` instead (for setups where the abs-pointer device misbehaves). |
| `COMPUTER_USE_LINUX_FORCE_PORTAL_POINTER` / `…_KEYBOARD` | Always route pointer / keyboard through the RemoteDesktop portal on Wayland, skipping auto-detection. |
| `COMPUTER_USE_LINUX_FORCE_YDOTOOL_POINTER` / `…_KEYBOARD` | Always route pointer / keyboard through `ydotool`, skipping the portal and KDE clipboard paths. |
| `COMPUTER_USE_LINUX_COSMIC_HELPER` | Path to the `computer-use-linux-cosmic` helper when it isn't next to the binary or on `PATH` (`CODEX_COMPUTER_USE_COSMIC_HELPER` is also accepted by embedded Codex builds). |
| `CU_DISABLE_ABS_POINTER` | Disable the uinput absolute pointer and click through `ydotool` instead (for setups where the abs-pointer device misbehaves); embedded Codex builds may use `CODEX_COMPUTER_USE_DISABLE_ABS_POINTER`. |
| `COMPUTER_USE_LINUX_FORCE_PORTAL_POINTER` / `…_KEYBOARD` | Always route pointer / keyboard through the RemoteDesktop portal on Wayland, skipping auto-detection; embedded Codex builds may use `CODEX_COMPUTER_USE_FORCE_PORTAL_POINTER` / `…_KEYBOARD`. |
| `COMPUTER_USE_LINUX_FORCE_YDOTOOL_POINTER` / `…_KEYBOARD` | Always route pointer / keyboard through `ydotool`, skipping the portal and KDE clipboard paths; embedded Codex builds may use `CODEX_COMPUTER_USE_FORCE_YDOTOOL_POINTER` / `…_KEYBOARD`. |

**Build-time identity overrides** (set while compiling a downstream embedded
bundle): `CUL_GNOME_EXTENSION_UUID`, `CUL_DBUS_SERVICE`, and
`CUL_DBUS_OBJECT_PATH` replace the default standalone GNOME Shell extension
UUID and DBus endpoint in both the Rust probes and the generated extension
files.

**npm wrapper** (set during `npm install`, or before running):

Expand Down
13 changes: 9 additions & 4 deletions src/cosmic_helper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ pub struct CosmicHelperActivation {
}

pub fn resolve_helper_binary() -> Result<PathBuf> {
if let Some(path) = env::var("COMPUTER_USE_LINUX_COSMIC_HELPER")
.ok()
.filter(|value| !value.trim().is_empty())
{
if let Some(path) = env_var_first(&[
"COMPUTER_USE_LINUX_COSMIC_HELPER",
"CODEX_COMPUTER_USE_COSMIC_HELPER",
]) {
let path = PathBuf::from(path);
if path.exists() {
return Ok(path);
Expand All @@ -47,6 +47,11 @@ pub fn resolve_helper_binary() -> Result<PathBuf> {
bail!("COSMIC helper binary {COSMIC_HELPER_BINARY} not found")
}

fn env_var_first(keys: &[&str]) -> Option<String> {
keys.iter()
.find_map(|key| env::var(key).ok().filter(|value| !value.trim().is_empty()))
}

pub fn probe() -> Result<CosmicHelperProbe> {
run_json_command(["probe"])
}
Expand Down
Loading
Loading