错误 /var/tmp/kdecache 由 uid 1000 而不是 uid 0 拥有
error /var/tmp/kdecache is owned by uid 1000 instead of uid 0
我正在 Kubuntu 12.04 中使用 NetBeans 7.1 编写 Qt 4.8 程序 (http://code.google.com/p/image-feature-detector/((尽管在 Kubuntu 11.10 中也会发生同样的情况(,当我尝试运行编译的可执行文件时,我遇到了一个令人抓狂的错误。该程序编译并运行完美,但是突然有一天,当我在正确编译后尝试运行它时,我遇到了此错误。
如果我使用 sudo
运行可执行文件,这就是我得到的:
error /var/tmp/kdecache-myuser is owned by uid 1000 instead of uid 0
如果我在没有sudo
的情况下运行可执行文件,我会得到:
Segmentation fault (core dumped)
如果我使用 kdesudo
运行可执行文件,通过提示密码出现窗口后,没有任何反应。
如果我调试程序,调试将在到达 NetBeans 向我展示的程序的反汇编部分的第二行的任何源代码行之前停止:
_ZN15QAbstractButton10setCheckedEb()
Stops here->_ZN15QAbstractButton10setCheckedEb+22: mov 0x8(%rdi),%rbp
_ZN15QAbstractButton10setCheckedEb+26: mov %esi,%r12d
_ZN15QAbstractButton10setCheckedEb+29: movzbl 0x214(%rbp),%eax
_ZN15QAbstractButton10setCheckedEb+36: test $0x1,%al
_ZN15QAbstractButton10setCheckedEb+38: je 0x7ffff74a10d0 <_ZN15QAbstractButton10setCheckedEb+192>
_ZN15QAbstractButton10setCheckedEb+44: mov %eax,%edx
_ZN15QAbstractButton10setCheckedEb+46: shr %dl
_ZN15QAbstractButton10setCheckedEb+48: and $0x1,%edx
_ZN15QAbstractButton10setCheckedEb+51: cmp %sil,%dl
_ZN15QAbstractButton10setCheckedEb+54: je 0x7ffff74a10d0 <_ZN15QAbstractButton10setCheckedEb+192>
_ZN15QAbstractButton10setCheckedEb+60: test %sil,%sil
_ZN15QAbstractButton10setCheckedEb+63: je 0x7ffff74a1100 <_ZN15QAbstractButton10setCheckedEb+240>
_ZN15QAbstractButton10setCheckedEb+69: mov %rsp,%rdi
_ZN15QAbstractButton10setCheckedEb+72: mov %rbx,(%rsp)
_ZN15QAbstractButton10setCheckedEb+76: callq 0x7ffff70bd220 <_ZN11QMetaObject8addGuardEPP7QObject@plt>
_ZN15QAbstractButton10setCheckedEb+81: movzbl 0x214(%rbp),%eax
_ZN15QAbstractButton10setCheckedEb+88: mov %r12d,%edx
_ZN15QAbstractButton10setCheckedEb+91: and $0x1,%edx
_ZN15QAbstractButton10setCheckedEb+94: add %edx,%edx
_ZN15QAbstractButton10setCheckedEb+96: and $0xfffffffd,%eax
_ZN15QAbstractButton10setCheckedEb+99: or %edx,%eax
_ZN15QAbstractButton10setCheckedEb+101: test $0x20,%al
_ZN15QAbstractButton10setCheckedEb+103: mov %al,0x214(%rbp)
_ZN15QAbstractButton10setCheckedEb+109: je 0x7ffff74a10e8 <_ZN15QAbstractButton10setCheckedEb+216>
_ZN15QAbstractButton10setCheckedEb+111: mov %rbp,%rdi
_ZN15QAbstractButton10setCheckedEb+114: callq 0x7ffff749f9f0
_ZN15QAbstractButton10setCheckedEb+119: cmpq $0x0,(%rsp)
我进行了实验并将/var/tmp/kdecache-myuser/
的所有权更改为root
(uid 0(。然后我用sudo
运行我的可执行文件,我得到了一个"隔离错误"错误,就像我在没有sudo
的情况下运行程序一样。另外,当我更改原始/var/tmp/kdecache-myuser/
文件夹的权限时,会创建一个具有myuser
权限的新/var/tmp/kdecache-looksLikeMd5Number/
文件夹。
我将不胜感激任何关于如何解决这个让我发疯的错误的建议。
这不是一个答案,但它可能是一种简单的方法来重现你的问题,同时证明它不是你自己的代码的问题。(你的问题的标题是我关注的地方:"错误:"/var/tmp/kdecache-your_user"由 uid 1000 而不是 uid 0 拥有"。
我认为您可以使用kdialog(Ubuntu上的kdebase-bin软件包的一部分(来复制此错误。我可以这样做,我希望找到一个解决方案(这就是我遇到你的问题的方式(。
步骤:
- 打开终端
- sudo apt-get install kdebase-bin
-
仍在终端中,输入:
kdialog --error "blah blah blah."
-
预期结果:以普通用户身份执行此kdialog时没有错误。这就是我的实际结果。
- sudo -s (输入您的密码(
-
重复上述命令:
kdialog --error "blah blah blah."
-
预期结果 - 它应该正常工作没有错误。但是,您可能会看到与您的问题中的错误相同。
这是我的实际结果:
$ kdialog --error "blah blah blah"
$ sudo -s
root> kdialog --error "blah blah blah"
Error: "/var/tmp/kdecache-computeruser" is owned by uid 1000 instead of uid 0.
您甚至可能会看到更多这样的错误。我已经通过各种kdialog测试得到了这些,就像上面的一样。
Error: "/var/tmp/kdecache-your_user" is owned by uid 1000 instead of uid 0.
Error: "/tmp/kde-your_user" is owned by uid 1000 instead of uid 0.
Error: "/tmp/ksocket-your_user" is owned by uid 1000 instead of uid 0.
kdeinit4: Shutting down running client.
Connecting to deprecated signal QDBusConnectionInterface::serviceOwnerChanged(QString,QString,QString)
Error: "/tmp/ksocket-your_user" is owned by uid 1000 instead of uid 0.
Error: "/tmp/kde-your_user" is owned by uid 1000 instead of uid 0.
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
Error: "/var/tmp/kdecache-your_user" is owned by uid 1000 instead of uid 0.
kbuildsycoca4 running...
Error: "/var/tmp/kdecache-your_user" is owned by uid 1000 instead of uid 0.
Error: "/var/tmp/kdecache-your_user" is owned by uid 1000 instead of uid 0.
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
Error: "/var/tmp/kdecache-your_user" is owned by uid 1000 instead of uid 0.
Home directory /home/your_user not ours.
哎呀,这个错误是愚蠢的。它在我的代码中,而不是在 KDE 中(是的,我们总是倾向于认为"这不可能是我的错!...)它与su
特权无关。正如我所怀疑的那样,它与指针有关。我只是尝试使用null
指针的函数,正是来自QAbstractdButton
实例的函数setChecked()
。是的,完全-.- ...该程序编译正确,但通过运行它,我在逻辑上获得了Segmentation fault
。
有趣的是,如果我使用 sudo
运行程序,我会收到的错误:error /var/tmp/kdecache is owned by uid 1000 instead of uid 0
。目前,如果我使用 sudo
运行该程序,我会在控制台上收到相同的错误,但在它之后程序正常运行。
- 在 c++ 中拥有一组结构的正确方法是什么?
- 我应该如何表示我拥有的连续元素序列?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 现代 C++ 中作为类成员的非拥有指针
- 结构包含在两个头文件中,这两个文件我都不拥有
- 在函数中拥有函数原型的目的是什么?
- condition_variable、引用和线程:谁拥有锁?
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 有没有办法在 c++ 中拥有条件预处理器
- 为什么我不能拥有某些私有会员功能?
- 如何拥有受约束的运算符模板?
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- CBasePin 递增对拥有过滤器的引用.循环引用?
- 谁拥有作为指向 Windows API 函数的指针传递的值?
- 是否可以获取成员函数模板参数的拥有对象?
- 拥有或在对象之间共享资源
- C++可以在全局范围内拥有代码吗?
- 如何在一个功能中拥有所有选项?
- 让线程拥有它C++运行的函子
- 错误 /var/tmp/kdecache 由 uid 1000 而不是 uid 0 拥有