Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ

本文通过一个具体的例子展示了在使用ps命令查找进程时常见的错误做法,并给出了正确的命令对比,强调了在命令行操作中细致认真的态度对于避免此类问题的重要性。

ps的时候经常能遇到这个低级错误,屡次都这样

本来以为是系统设置问题

现在让大家看看这两个命令的区别,就一目了然了

# ps -aux | grep nginx |grep -v grep
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
root 25962 0.0 0.0 40892 868 ? Ss 15:04 0:00 nginx: master process /usr/local/nginx/sbin/nginx
www 25963 0.0 0.0 41268 1392 ? S 15:04 0:00 nginx: worker process

# ps aux |grep nginx|grep -v grep
root 25962 0.0 0.0 40892 868 ? Ss 15:04 0:00 nginx: master process /usr/local/nginx/sbin/nginx
www 25963 0.0 0.0 41268 1392 ? S 15:04 0:00 nginx: worker process

这个问题都已经出现很长时间了,今天看了以后特别扭,就像除后患,现在好了,原来问题出在自身

那句话说的没错“细致 认真 敏感 多疑”,这应该是我们工作的态度

感谢你提供的 `dpkg -L at-spi2-core` 输出,这非常关键。 从输出中我们可以确认: ```bash /usr/libexec/at-spi-bus-launcher /usr/libexec/at-spi2-registryd ``` ✅ 文件存在!但路径是 `/usr/libexec/`,**不是 `/usr/bin/**。 这就是为什么你运行: ```bash at-spi-bus-launcher --launch-immediately ``` 会报错: ``` command not found ``` 因为 shell 默认只在 `$PATH` 中查找可执行文件,而 `/usr/libexec` **通常不在 `$PATH` 中**。 --- ## ✅ 解决方案:使用完整路径调用 `/usr/libexec/at-spi-bus-launcher` ### ✔️ 方法 1:直接运行(推荐用于调试) ```bash # 检查是否存在 ls -l /usr/libexec/at-spi-bus-launcher # 运行它 eval $(/usr/libexec/at-spi-bus-launcher --launch-immediately) export AT_SPI_BUS_ADDRESS ``` 📌 成功后你会看到类似输出: ```bash Starting system message bus... Starting A11Y bus... ``` 并且环境变量被设置: ```bash echo $AT_SPI_BUS_ADDRESS # 输出示例: unix:path=/tmp/dbus-XXXX,guid=... ``` > ⚠️ 注意:`at-spi-bus-launcher` 是一个 **脚本**,它会自动启动 D-Bus 总线和 `at-spi2-registryd`。 --- ### 🧩 它做了什么? `/usr/libexec/at-spi-bus-launcher --launch-immediately` 的作用是: 1. 启动一个私有的 **A11Y D-Bus 总线**(Accessibility Bus) 2. 设置 `AT_SPI_BUS_ADDRESS` 环境变量 3. 启动 `at-spi2-registryd` 守护进程 4. 注册 D-Bus service `org.a11y.Bus` 这些对 GTK 初始化至关重要。 --- ## ✅ 推荐最终启动脚本(适用于 WSL + Ubuntu 24.04) 由于 WSL 默认不启用 systemd,我们必须手动启动服务。 创建脚本: ```bash nano ~/start-a11y.sh ``` 内容如下: ```bash #!/bin/bash # 设置 DISPLAY(WSL 自动获取 Windows DNS IP) export DISPLAY=$(awk &#39;/nameserver / {print $2; exit}&#39; /etc/resolv.conf):0 # 可选:禁用无障碍桥接(除非你需要读屏软件) export NO_AT_BRIDGE=1 # 可选:避免 WebKit 渲染问题 export WEBKIT_DISABLE_COMPOSITING_MODE=1 # 确保 DBUS_SESSION_BUS_ADDRESS 已设置 if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then if pgrep -x dbus-daemon > /dev/null; then echo "🔹 Found existing D-Bus session." else echo "🔸 Starting D-Bus session..." eval $(dbus-launch --sh-syntax --exit-with-session) fi fi # 手动启动 AT-SPI 总线(关键步骤) if [ -z "$AT_SPI_BUS_ADDRESS" ] || ! pgrep -x "at-spi2-registryd" > /dev/null; then if [ -x "/usr/libexec/at-spi-bus-launcher" ]; then echo "🔊 Starting AT-SPI accessibility bus..." eval $(/usr/libexec/at-spi-bus-launcher --launch-immediately) export AT_SPI_BUS_ADDRESS echo "✅ AT-SPI Bus Address: $AT_SPI_BUS_ADDRESS" else echo "❌ /usr/libexec/at-spi-bus-launcher not found or not executable" exit 1 fi else echo "🟢 AT-SPI already running." fi # 验证守护进程是否启动 if pgrep -x "at-spi2-registryd" > /dev/null; then echo "✔️ at-spi2-registryd is active" else echo "⚠️ at-spi2-registryd not running!" fi echo "🎉 GUI environment ready. You can now run your AppImage." ``` 赋予执行权限: ```bash chmod +x ~/start-a11y.sh ``` 然后运行: ```bash source ~/start-a11y.sh ``` 最后启动你的应用: ```bash ./squashfs-root/AppRun ``` --- ## 🔍 验证是否成功 ### 1. 检查进程 ```bash ps aux | grep -E "(dbus|spi)" ``` 你应该看到: - `dbus-daemon` - `at-spi-bus-launcher` - `at-spi2-registryd` ### 2. 检查 D-Bus 服务 ```bash dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply \ /org/freedesktop/DBus org.freedesktop.DBus.ListNames | grep -i a11y ``` ✅ 正常输出包含: ```text string "org.a11y.Bus" ``` --- ## ❗常见错误及修复 | 错误 | 原因 | 修复 | |------|------|------| | `at-spi-bus-launcher: command not found` | 路径不对 | 使用 `/usr/libexec/at-spi-bus-launcher` | | `Permission denied` | 权限不足 | 确保文件有 `+x` 权限:<br>`sudo chmod +x /usr/libexec/at-spi-bus-launcher` | | `Failed to connect to socket` | X Server 未运行 | 启动 VcXsrv/X410 并配置防火墙 | --- ## ✅ 补充:你可以将 `/usr/libexec` 加入 PATH(可选) 编辑 shell 配置文件: ```bash echo &#39;export PATH=$PATH:/usr/libexec&#39; >> ~/.bashrc source ~/.bashrc ``` 之后就可以直接运行: ```bash at-spi-bus-launcher --launch-immediately ``` 但注意:这不是标准做法,可能带来安全风险或命名冲突。 --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值