如何从软件中心删除“购买”部分?

Alb*_*dez 34 software-center

软件中心有一个For Purchase程序部分——见下面的截图——,
每次我想安装一些东西时都会让我很恼火。

有没有办法从软件中心删除隐藏这些程序?

答案链接:

对于13.10 及更高版本
对于13.04
对于12.10
对于12.04
对于11.10 及更低版本 如果它不适合您或您遇到问题,
请发表评论或发送邮件jmendeth@gmail.com

Ubuntu 软件中心的“购买”部分。

Alb*_*dez 17

对于 12.04

源自 Pavlos G. answerDarmien answer 的灵感。
不同版本?转到列表
如果您遇到麻烦并想恢复更改,请参阅帖子的末尾。


1. 忽略可购买的应用程序

打开一个终端Ctrl+ Alt+ T)和类型:

gksu gedit /usr/share/software-center/softwarecenter/db/update.py
Run Code Online (Sandbox Code Playgroud)

然后按 Enter。系统会提示您输入密码。
然后会出现一个编辑器。找到以下几行(提示:Ctrl+F可能有帮助):

        doc = make_doc_from_parser(parser, cache)
        if not doc:
            LOG.debug("make_doc_from_parser() returned '%s', ignoring" % doc)
            return
        term_generator.set_document(doc)
        name = doc.get_data()
Run Code Online (Sandbox Code Playgroud)

紧跟在这些行之后,粘贴以下内容(包括空格!):

        if doc.get_value(XapianValues.PRICE) not in (""): return
Run Code Online (Sandbox Code Playgroud)

注意:如果您想保留不花钱但必须“购买”的东西
(例如试用版、杂志和其他专有东西),请替换("")("0.00", "").

保存文件 ( Ctrl+ S),打开软件中心,然后……瞧!
没有商业程序!
您现在可以关闭编辑器和终端。

2.删除“购买”渠道(可选)

要同时删除菜单中的“购买”项目,请打开终端并键入:

gksu gedit /usr/share/software-center/softwarecenter/backend/channel_impl/aptchannels.py
Run Code Online (Sandbox Code Playgroud)

找到这些行:

        if get_distro().PURCHASE_APP_URL:
            channels.append(for_purchase_channel)
Run Code Online (Sandbox Code Playgroud)

并通过#在每行前面放置一个来禁用它们:

        #if get_distro().PURCHASE_APP_URL:
        #    channels.append(for_purchase_channel)
Run Code Online (Sandbox Code Playgroud)

保存并享受无广告的软件中心!

 


旁注:该。文件。是。包装好的。

你问这是什么意思?这意味着,
无论何时升级您的软件中心,更改
都会恢复,您必须再次执行此步骤。

撤消修改

如果要恢复文件的原始状态,请
打开终端并键入:

sudo apt-get install --reinstall software-center && exit
Run Code Online (Sandbox Code Playgroud)

再次提示您输入密码,这次是在终端上。
键入它并按 ENTER。如果您键入时没有任何显示,请不要担心,这是隐藏您的密码。
完成后终端将自动关闭。

  • 正如我对其他人所说的那样,最好在编辑对程序至关重要的任何内容之前进行备份。 (2认同)

Pav*_* G. 12

对于 11.10 及更早版本

您可以编辑:

/usr/share/software-center/softwarecenter/backend/channel.py

并注释掉(或删除)以下几行:

for_purchase_channel = None
Run Code Online (Sandbox Code Playgroud)
#create a "magic" channel to display items available for purchase                                              `
        for_purchase_query = xapian.Query("AH" + AVAILABLE_FOR_PURCHASE_MAGIC_CHANNEL_NAME)
        for_purchase_channel = SoftwareChannel(self.icons, 
                                             "For Purchase", None, None, 
                                             channel_icon=None,   # FIXME:  need an icon
                                             channel_query=for_purchase_query,
                                             installed_only=installed_only)
Run Code Online (Sandbox Code Playgroud)
if partner_channel is not None:
        #    channels.append(partner_channel)
        #channels.append(for_purchase_channel)
Run Code Online (Sandbox Code Playgroud)

当然,您应该记住,随后的更新software-center可能会覆盖脚本......

查看此链接了解更多详情;-)

注意:对于 12.04,文件名是/usr/share/software-center/softwarecenter/backend/channel_impl/aptchannels.py. 相同的步骤适用。


Dam*_*ien 6

我找到了一种隐藏 12.04 商业结果的方法:

在 /usr/share/software-center/softwarecenter/ui/gtk3/models/appstore2.py 中:

行后:

def set_from_matches(self, matches):
    """ set the content of the liststore based on a list of
        xapian.MSetItems
    """
    LOG.debug("set_from_matches len(matches)='%s'" % len(matches))
Run Code Online (Sandbox Code Playgroud)

添加以下行:

    matches[:] = [m for m in matches if (m.document.get_value(XapianValues.PRICE) in _FREE_AS_IN_BEER)]
Run Code Online (Sandbox Code Playgroud)

它应该只改变显示的内容,但我还没有对其进行太多测试,因此使用风险自负。并享受无广告软件中心。


Len*_*and 6

为了完整起见,以下是在 13.10 中对我有用的解决方案:

sudo aptitude install gksu
gksu gedit /usr/share/software-center/softwarecenter/db/update.py
Run Code Online (Sandbox Code Playgroud)

找到这个:

def make_doc(self, cache):
    """Build a Xapian document from the desktop info."""
    doc = xapian.Document()
Run Code Online (Sandbox Code Playgroud)

并添加这个(确保你有正确的 TABS 缩进(python 需要这个):

if self.has_option_desktop("X-AppInstall-Price"):
    if self.get_desktop("X-AppInstall-Price") > 0: return
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这是我的第一个 python evar :-)