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


13.10及更高版本是什么意思? - Avinash Raj
@AvinashRaj 这适用于最新版本的Ubuntu,例如目前的13.10,很快就会有14.04,我相信14.04的alpha/beta版本也即将发布。 - Alvar
7个回答

适用于 12.04

派弗洛斯G的答案和达尔米恩的启发衍生而来参见Pavlos G. answerDarmien answer
想要其他版本?点击这个列表
如果您遇到麻烦并想恢复更改,请查看帖子末尾。


1. 忽略可购买的应用程序
打开一个终端(Ctrl + Alt + T)并输入:
gksu gedit /usr/share/software-center/softwarecenter/db/update.py

按下回车键。您将被提示输入密码。 然后会出现一个编辑器。找到以下行(提示:可以使用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()

在那些行之后,立即粘贴以下内容(包括空格!):
        if doc.get_value(XapianValues.PRICE) not in (""): return

注意:如果你想保留不需要花钱但必须“购买”的东西(比如试用版、杂志和其他专有物品),请将("")替换为("0.00", "")

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

2. 移除“购买”频道(可选)

要同时移除菜单中的“购买”项目,打开终端并输入以下命令:

gksu gedit /usr/share/software-center/softwarecenter/backend/channel_impl/aptchannels.py

找到这些行:

        if get_distro().PURCHASE_APP_URL:
            channels.append(for_purchase_channel)

把每一行的前面加上一个#来禁用它们:
        #if get_distro().PURCHASE_APP_URL:
        #    channels.append(for_purchase_channel)

节省并享受一个没有广告的软件中心!

 


侧记:文件已打包。
你问这是什么意思?这意味着,每当你升级软件中心时,更改将被还原,你将不得不再次执行这些步骤。
撤消修改
如果你想恢复文件的原始状态,请打开终端并输入:
sudo apt-get install --reinstall software-center && exit

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


2就像我之前告诉别人的那样,在对程序进行重要编辑之前最好先备份一下。 - nanofarad
1@ObsessiveFOSS 说得太对了。但是要记住:1) 这些改变非常微小,而且很容易撤销。人们不太可能迷失。 :D 2) 这些文件已经打包好了,所以如果你犯错了,可以直接重新安装这个包。 - Alba Mendez
@ObsessiveFOSS 我已经添加了还原的说明,以防万一 ;) - Alba Mendez

对于11.10及更早版本

您可以进行编辑:

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

注释掉(或删除)以下行:
for_purchase_channel = None

#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)

if partner_channel is not None:
        #    channels.append(partner_channel)
        #channels.append(for_purchase_channel)

当然,您应该记住,software-center 的后续更新可能会覆盖脚本...
查看此链接以获取更多详细信息;-)
注意:对于12.04版本,文件名为/usr/share/software-center/softwarecenter/backend/channel_impl/aptchannels.py。相同的步骤适用。

1有兴趣为12.04找到一个解决方案吗? :) - Savvas Radevic
1如果您用旧版本替换软件中心(http://askubuntu.com/questions/95497/is-it-possible-to-get-the-old-software-center-back),则可以按照以下步骤操作。 - Mateo
在12.04版本中,这些步骤将隐藏“购买”频道,但不会隐藏所有商业条目。要同时隐藏它们,需要类似Darmien的解决方案。(但我想找到一种改变逻辑而不是图形界面的方法)。 - Alba Mendez
我找到了!从任何地方隐藏所有商业条目! - Alba Mendez
@medigeek看看我的答案。如果不行,告诉我。我在三台不同的电脑上测试了它。 - Alba Mendez
在编辑文件之前先备份是个好主意。 - nanofarad

我找到了一种方法来隐藏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))

添加以下行:
    matches[:] = [m for m in matches if (m.document.get_value(XapianValues.PRICE) in _FREE_AS_IN_BEER)]

它应该只更改显示的内容,但我还没有进行过太多测试,所以使用时要自担风险。并且享受无广告的软件中心。


太棒了!迫不及待想要测试它。 :) - Alba Mendez
还没有测试过,但会尽快进行。谢谢你的尝试! - Savvas Radevic

为了完整起见,这是在13.10版本中对我有效的解决方案。
sudo aptitude install gksu
gksu gedit /usr/share/software-center/softwarecenter/db/update.py

找到这个:

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

并添加这个(确保您有正确的TAB缩进(Python需要这个):)
if self.has_option_desktop("X-AppInstall-Price"):
    if self.get_desktop("X-AppInstall-Price") > 0: return

顺便说一下,这是我第一次接触Python呢 :-)

+1 现在无法验证,但也已添加到目录中。谢谢! - Alba Mendez
适用于14.04版本,但如果能够在用户界面上进行开关操作会更好。这个解决方案比较永久。再也不会看到需要购买的应用程序了。 - VlatkoB

我试过这个,对我有效:只显示免费(价格不超过0)的物品。

gksu gedit /usr/share/software-center/softwarecenter/db/update.py

找到这个:

def make_doc_from_parser(parser, cache):
    # XXX 2012-01-19 michaeln I'm just pulling this code out from
    # index_app_info_from_parser, but it'd be great to further
    # refactor it - it looks quite scary :-)
    doc = xapian.Document()
    # app name is the data

然后添加以下代码:
if parser.has_option_desktop("X-AppInstall-Price"):
    if parser.get_desktop("X-AppInstall-Price") > 0: return

适用于12.10及更高版本

源于jmendethanswer
版本不同?请前往列表
如果您遇到问题并希望恢复更改,请查看帖子末尾。

如果软件中心已打开,请关闭它。
现在打开一个终端Ctrl + Alt + T)并输入:

gksu gedit /usr/share/software-center/softwarecenter/db/update.py

按下Enter键。您将被提示输入密码。 然后会出现一个编辑器。找到以下行(提示:使用Ctrl + F可能会有帮助):
        doc = self.make_doc(cache)
        if not doc:
            LOG.debug("%r.index_app_info: returned invalid doc %r, ignoring.",
                      self.__class__.__name__, doc)
            return
        name = doc.get_data()

在那些行之后,立即粘贴以下内容(包括空格!):
        if doc.get_value(XapianValues.PRICE) not in (""): return

保存文件(Ctrl + S),然后关闭编辑器,但不要关闭终端。
现在在终端中输入:
gksu gedit /usr/share/software-center/softwarecenter/backend/channel_impl/aptchannels.py

按下回车键。编辑器将再次出现。 找到这些行:
        if get_distro().PURCHASE_APP_URL:
            channels.append(for_purchase_channel)

把每一行的前面加上一个#来禁用它们:
        #if get_distro().PURCHASE_APP_URL:
        #    channels.append(for_purchase_channel)

保存文件,关闭编辑器但不要关闭终端。
在终端中输入:

gksu echo; sudo update-software-center && exit

稍等一下,终端将在完成后自动关闭...
然后打开软件中心... 哇!
没有商业程序!
附注:文件已打包。
你问这是什么意思?这意味着,每当你升级软件中心时,更改将被还原,你需要再次执行这些步骤。
撤销修改
如果你想恢复文件的原始状态,请打开终端并输入:
gksu echo; sudo apt-get install --reinstall software-center && exit

再次,您将被要求输入密码。
当完成后,终端将自动关闭。

+1 感谢您的贡献! 这个问题变得相当复杂了,所以我打算编写一个Python脚本,根据版本进行适当的修复。 - Alba Mendez
我会在我的12.10上进行测试,如果一切准备就绪,我会将你的答案链接放在顶部,并进行其他修改。 - Alba Mendez
刚刚在我全新安装的Ubuntu 12.10上完成了这个任务。 - blvdeer
@jmendeth 我很乐意帮助你写那个剧本。 - blvdeer
抱歉耽搁了。很不幸,在我的64位Ubuntu 12.10上无法运行。我会看看能否解决一些问题... - Alba Mendez
然而,似乎禁用“购买”渠道也能解决问题。你需要这样做吗? - Alba Mendez
@jmendeth 不,我没有。顺便问一下,“购买”禁用选项在哪里? - blvdeer
好的,要禁用“购买”(请参见截图),您需要按照我的回答的第二部分进行操作。我会建议对您的回答进行编辑。 - Alba Mendez
顶部的链接已更新,指向您(现在被接受的)答案。 - Alba Mendez
已确认适用于Ubuntu 13.10版本。 - Christopher Berman

您可以更简单地通过选择“查看”->“规范维护软件”而不是“所有软件”来完成此操作。这样做的好处是不会被软件更新覆盖。
这可能会隐藏一些其他项目,但至少可以消除我经历过的烦人的杂志和出售软件。

2那你只显示了Canonical支持的软件,隐藏了90%的所有软件。我想要做的是仅仅移除专有软件。 - Alba Mendez