【问题标题】:error /var/tmp/kdecache is owned by uid 1000 instead of uid 0错误 /var/tmp/kdecache 属于 uid 1000 而不是 uid 0
【发布时间】:2012-05-20 21:47:01
【问题描述】:

我正在 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/ 文件夹。

如果有任何关于如何解决这个让我发疯的错误的建议,我将不胜感激。

【问题讨论】:

  • 嗯,我想这一定与一些指向null的指针有关。
  • 请参阅我的回复,了解为什么至少部分原因(“错误:“/var/tmp/kdecache-computeruser”归 uid 1000 而不是 uid 0“所有”)似乎不是代码中的问题,例如空指针...除非 kdialog 中存在相同的问题。

标签: c++ qt netbeans segmentation-fault kde


【解决方案1】:

这不是一个答案,但它可能是重现您的问题的简单方法,同时证明这不是您自己的代码的问题。 (你的问题的标题是我关注的地方:“错误:“/var/tmp/kdecache-your_user”归 uid 1000 而不是 uid 0 拥有。)

我认为您可以使用 kdialog(Ubuntu 上的 kdebase-bin 软件包的一部分)来复制此错误。我可以这样做,我希望找到一个解决方案(这就是我遇到你的问题的方式)。

步骤:

  1. 打开一个终端
  2. sudo apt-get install kdebase-bin
  3. 还在终端,输入:

    kdialog --error "blah blah blah."

  4. 预期结果:以普通用户身份执行此 kdialog 时没有错误。这就是我的实际结果。

  5. sudo -s(输入你的密码)
  6. 重复上述命令:

    kdialog --error "blah blah blah."

  7. 预期结果 - 它应该可以正常工作。但是,您可能会看到与您的问题相同的错误。

这是我的实际结果:

$ 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.

【讨论】:

  • 噢!你完全正确!我做了您发布的内容,并得到了您公开的结果,其中有很多错误,例如您的第二段代码。关于为什么会发生这种情况,你的理论是什么?您是否对正在进行的 Qt 程序有同样的错误?
【解决方案2】:

哦,这个错误是愚蠢的。它在我的代码中,而不是在 KDE 中(是的,我们总是倾向于认为“这不是我的错!”...)而且它与 su 特权无关。正如我所怀疑的,它与指针有关。我只是想使用null 指针的函数,正是来自QAbstractdButton 实例的函数setChecked()。是的,完全-.- ...程序编译正确,但通过运行它,我得到了Segmentation fault,逻辑上。

有趣的是,如果我使用sudo 运行程序时出现的错误:error /var/tmp/kdecache is owned by uid 1000 instead of uid 0。目前,如果我使用sudo 运行程序,我会在控制台上遇到相同的错误,但之后程序运行正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2014-09-28
    • 1970-01-01
    • 2016-02-25
    相关资源
    最近更新 更多