{"record":{"id":"15cb47b300c488af","repo":"xai-org/grok-build","slug":"arboard-leg-disabled-grok-clipboard-no-data-contr","errorCode":null,"errorMessage":"arboard leg disabled (GROK_CLIPBOARD_NO_DATA_CONTROL)","messagePattern":"arboard leg disabled \\(GROK_CLIPBOARD_NO_DATA_CONTROL\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"crates/codegen/xai-grok-shared/src/clipboard.rs","lineNumber":1328,"sourceCode":"                }\n            })\n            .as_ref()\n            .ok_or_else(|| anyhow::anyhow!(\"arboard unavailable\"))\n    }\n\n    /// Deadline for in-process arboard reads. The Wayland data-control read has\n    /// no internal timeout and blocks forever on a hung selection owner (the\n    /// X11 path has a 4 s budget), so reads run on a worker thread that is\n    /// abandoned on expiry. The worker's `Clipboard` instance leaks with it;\n    /// harmless while the lease keeps the shared backend alive.\n    const ARBOARD_READ_WAIT: std::time::Duration = std::time::Duration::from_secs(2);\n\n    fn arboard_read_with_deadline<T: Send + 'static>(\n        op: impl FnOnce(&mut arboard::Clipboard) -> anyhow::Result<T> + Send + 'static,\n    ) -> anyhow::Result<T> {\n        use std::sync::mpsc::RecvTimeoutError;\n        if arboard_wayland_bypassed() {\n            anyhow::bail!(\"arboard leg disabled (GROK_CLIPBOARD_NO_DATA_CONTROL)\");\n        }\n        let result = spawn_with_deadline(\"clipboard-read\", ARBOARD_READ_WAIT, move || {\n            arboard::Clipboard::new()\n                .map_err(anyhow::Error::from)\n                .and_then(|mut clipboard| op(&mut clipboard))\n        });\n        match result {\n            Ok(inner) => inner,\n            Err(RecvTimeoutError::Timeout) => Err(anyhow::anyhow!(\"arboard read timed out\")),\n            Err(RecvTimeoutError::Disconnected) => Err(anyhow::anyhow!(\"arboard read worker died\")),\n        }\n    }\n\n    fn arboard_get_text() -> anyhow::Result<Option<String>> {\n        arboard_read_with_deadline(|clipboard| match clipboard.get_text() {\n            Ok(text) if text.is_empty() => Ok(None),\n            Ok(text) => Ok(Some(text)),\n            Err(arboard::Error::ContentNotAvailable) => Ok(None),","sourceCodeStart":1310,"sourceCodeEnd":1346,"githubUrl":"https://github.com/xai-org/grok-build/blob/bc7f02eddd3d84085849dc19ed216f11c23b0571/crates/codegen/xai-grok-shared/src/clipboard.rs#L1310-L1346","documentation":"arboard read operations are skipped when the arboard Wayland bypass is active (env var GROK_CLIPBOARD_NO_DATA_CONTROL set), because arboard's data-control protocol conflicts with certain Wayland compositors. Any arboard-based read then returns this marker error immediately.","triggerScenarios":"Calling get_text/get_image/get_file_urls (or primary-selection reads) in a Linux Wayland session while GROK_CLIPBOARD_NO_DATA_CONTROL is set in the environment.","commonSituations":"Users on Wayland set the bypass env var to work around hangs/crashes in arboard's data-control backend, then wonder why clipboard reads fail; env var left set from an old workaround in shell profiles.","solutions":["Unset GROK_CLIPBOARD_NO_DATA_CONTROL if your compositor works with arboard's data-control protocol","Use the CLI-tool fallback legs (wl-paste/xclip/xsel) — ensure wl-clipboard or xclip is installed","Explicitly opt into reading via CLI tools rather than arboard while the bypass is active"],"exampleFix":"# before\nexport GROK_CLIPBOARD_NO_DATA_CONTROL=1\n\n# after\nunset GROK_CLIPBOARD_NO_DATA_CONTROL","handlingStrategy":"fallback","validationCode":"fn arboard_read_available() -> bool {\n    std::env::var_os(\"GROK_CLIPBOARD_NO_DATA_CONTROL\").is_none()\n}","typeGuard":null,"tryCatchPattern":"match clipboard::get_text() {\n    Err(e) if e.to_string().contains(\"arboard leg disabled\") => {\n        eprintln!(\"arboard bypassed; using CLI read fallback (wl-paste/xclip)\");\n        read_via_cli_tool()\n    }\n    other => other,\n}","preventionTips":["Unset GROK_CLIPBOARD_NO_DATA_CONTROL unless you specifically hit Wayland data-control hangs","Ensure wl-clipboard/xclip are installed so CLI fallback legs work","Document the bypass env var for users so they know arboard reads are off","Detect Wayland compositor type and choose the backend explicitly"],"tags":["clipboard","wayland","linux","env-var"],"backgroundTag":"clipboard-backend-disabled","analyzedSha":"bc7f02eddd3d84085849dc19ed216f11c23b0571","analyzedAt":"2026-08-31T04:59:42.031Z","schemaVersion":2},"datasetVersion":"2026-08-31T09:17:48.483Z"}