Mở /usr/share/software-center/softwarecenter/backend/scagent.py
và chỉnh sửa phần đầu của hàm này, để thông báo:
def query_exhibits(self):
import urllib, json
class Obj:
def __init__(self, obj):
self.obj = obj
def __getattr__(self, name):
if name[:2] == "__": return object.__getattr__(self, name)
return self.obj[name]
self.emit("exhibits", [Obj(x) for x in json.loads(urllib.urlopen("http://localhost:8800/cgi-bin/bannerlist.py").read())])
return
Bạn có thể để phần còn lại như nó là, nó sẽ không bao giờ đạt được.
Nếu bạn muốn hỗ trợ kịch bản trong <iframe>
, hãy chỉnh sửa
/usr/share/software-center/softwarecenter/ui/gtk3/widgets/exhibits.py
và tìm settings.set_property("enable-scripts", False)
. Thay đổi False
thành True
.
Bây giờ thực hiện /var/www/cgi-bin/bannerlist.py
và làm cho nó thực thi:
#!/usr/bin/env python
import json
print("Content-type: application/json\n")
print(json.dumps([
{
"html": "<iframe src='file:/tmp/test.html'></iframe>",
"title_translated": "Hey dawg",
"click_url": "http://4chan.org",
"package_names": ("gimp"),
"banner_urls": ["file:/"],
"published": True
},
{
"html": "<iframe src='http://localhost:8800/cgi-bin/banner.py'></iframe>",
"title_translated": "Hey dawg",
"click_url": "http://4chan.org",
"package_names": ("gimp"),
"banner_urls": ["file:/"],
"published": True
}
]))
Điều này cho thấy một danh sách biểu ngữ được tạo ra.
Bây giờ thực hiện /var/www/cgi-bin/banner.py
và làm cho nó thực thi:
#!/usr/bin/env python3
import time
print("Content-type: image/svg+xml\n")
print("""
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect width="300" height="100"
style="fill:rgba(0,0,255,0.5);stroke-width:1;stroke:rgba(0,0,0,0.5)"/>
<text x="0" y="25" fill="black">Time is """ + str(time.time()) + """</text>
</svg>
""")
Điều này cho thấy một biểu ngữ được tạo ra.
Bạn có thể cần phải xóa bộ đệm trung tâm phần mềm. Bạn có thể làm điều đó bằng cách sử dụng rm -rf ~/.cache/software-center
.
Rõ ràng bạn cần phải đặt một cái gì đó /tmp/test.html
cho banner đầu tiên hoạt động.
Bạn cũng cần một máy chủ web chạy ở 8800 cgi-bin
để làm việc này. Nếu bạn không có cái này, hãy chạy cái này trong Bash:
cd /var/www
python -c "import BaseHTTPServer as h, CGIHTTPServer as c;
i = c.CGIHTTPRequestHandler;
i.cgi_directories = ['/cgi-bin'];
h.HTTPServer(('', 8800),i).serve_forever()"
Bạn cần tạo kiểu iframe
để làm cho nó lấp đầy không gian, nhưng bạn đã tìm ra điều đó.