Monday, July 18, 2016

Running X Apps on Ubuntu Devices

Running X Apps on Ubuntu Devices You can install, launch, and use traditional debian-packaged X apps on Ubuntu devices. This may be unexpected given that Ubuntu devices do not seem to support user-installed debian packages, nor do they run the X Display Server. But it does work, courtesy of Mir/XMir and Libertine.

So here’s a bit of background to get started.

But first, please note that at this time, display and use of X apps on an external monitor is only available on the Pro5/M10 and on future devices. (BQ 4.5/E5 and Meizu MX4 do not support this feature.)

Hello Mir (Goodbye X)

Traditionally, and still on the Ubuntu Classic desktop with Unity 7, Ubuntu runs an X Display Server. Apps are debian packaged. And, they are written for X:

Due in part to X’s inherent security shortcomings, the Mir display server is now used on Ubuntu Devices under Unity 8 (although not yet by default on the desktop). XMir bridges traditional X apps to Mir. That is, apps written for X can run fine in a Mir/XMir environment:

Packages and the root file system

Ubuntu Classic has a root file system (rootfs) that is populated through installation of a carefully curated set of debian packages. At run time, users can install debian packages to add apps or modify their system.

This approach raises security concerns because debian packages execute installation scripts with root level privileges and because debian packages can alter what the rootfs provides by modifying or replacing core system components.

Ubuntu devices are designed for security and reliability. Ubuntu devices have a read-only rootfs that is small and tight, providing just what is needed and simplifying system updates. The rootfs is not modifiable by the user. Indeed it is mounted as a read-only partition. Users install apps through click packages that do not modify the rootfs.

Given all of this: how do users install debian packaged apps that use X on Ubuntu Devices? The answer is LIbertine with XMir.

Hello Libertine

Libertine is a system to manage app containers. It is specifically designed to support the many traditional X apps that are debian packaged. Each container is a separate Ubuntu rootfs populated through debian package installations. (Currently these containers are chroots: later, LXD contains will be supported. Also, currently the containers must be of the same Ubuntu series as the device: Vivid.)

So, you can install or create a libertine container, install debian packaged X apps into it, and launch them using the XApps scope. The apps access to the user’s key directories: Documents, Downloads, Music, Pictures, and Videos. So data files created and saved by an app in one container are available to apps in any other container, and indeed outside of the containers.

Let’s take a quick look at the XApps scope.

XApps Scope

This scope simply lists the containers and, for each container, it displays its apps. Here’s a look at a device with two containers. This system has two containers (Puritine and My Container). And each has a few apps:

  • Tap an app to launch it.
  • long press an app to hide it.
  • If you have any hidden apps, see them from the search icon (magnifying glass) and tap Hidden X Apps. Long press a hidden app to unhide it.
  • Note that a container with no apps does not display in the scope.
So how does one create and delete containers, and add or remove apps from them?

Libertine Container Manager

libertine-container-manager is a command line tool you use on the device to create and manage containers. This includes installing debian packaged apps into them. (These containers are created in the phablet user’s home directory and are not a part of the read-only rootfs.)

Note: libertine-container-manager currently cannot be run in the Terminal App. Instead please connect to your device from an Ubuntu system using phablet-shell.
Listing Containers
phablet@ubuntu-phablet:~$ libertine-container-manager list
puritine
my-container

The “puritine” container is pre-installed on many devices through the com.ubuntu.puritine click package (“Desktop Applications”):

phablet@ubuntu-phablet:~$ click list | grep puritine
com.ubuntu.puritine 0.11

The second container (“my-container”) was created on the device with libertine-container-manager.

Note: It is possible to pre-install customized containers through bespoke channels.
Creating a Libertine Container
You can create a new container on a device. The container needs a unique ID and (optionally) a name.

Note: The container must be the same Ubuntu series as the device, currently: vivid.

phablet@ubuntu-phablet:~$ libertine-container-manager create --id my-container --name "My Container" --distro vivid --type chroot

I: Retrieving Release
I: Retrieving Release.gpg
I: Checking Release signature
I: Valid Release signature (key id 790BC7277767219C42C86F933B4FE6ACC0B21F32)
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
[...]
Listing Apps in a Container
It’s easy to list the apps in a container. You just use the container’s id, as follows:

Note: We add the optional --json argument here and show only lines with “name” for display convenience.

phablet@ubuntu-phablet:~$ libertine-container-manager list-apps --id my-container --json | grep "\"name\""
"name": "Panel Manager",
"name": "Python (v3.4)",
"name": "Python (v2.7)",
"name": "gedit",
"name": "Help",
"name": "Notification Daemon",
"name": "Terminal",
Also note that all apps that install a .desktop file are listed by this command, although many of them are not displayed in the XApps scope since they are not appropriate.
Installing an app in a container
To install a debian package in a container, you just use install-package with the container id and the debian binary package name, as follows:

phablet@ubuntu-phablet:~$ libertine-container-manager install-package --id my-container --package terminator

The package and all of its dependencies are installed in the container. After this, assuming the package installs a .desktop file, it displays in the XApps scope and is launchable with a tap as expected.
Installing an app from a specific Launchpad PPA
By default, available debian packages are installed from the standard Ubuntu archive the chroot’s apt configuration points to. You can add a launchpad PPA, as follows:

phablet@ubuntu-phablet:~$ libertine-container-manager configure --id my-container --archive ppa:USER/PPA-NAME

(Currently, private PPAs are scheduled for an upcoming release.)

After this, you can install packages into the container as usual, including from the PPA.
Removing apps from a container
Remove a debian package from a container with:

phablet@ubuntu-phablet:~$ libertine-container-manager remove-package --id my-container --package PACKAGE_NAME
Libertine-container-manager help
Use the --help for top level help.

You can see details on each subcommand, for example remove-package, as follows:

phablet@ubuntu-phablet:~$ libertine-container-manager remove-package --help
usage: libertine-container-manager remove-package [-h] -p PACKAGE [-i ID] [-r]


optional arguments:
-h, --help show this help message and exit
-p PACKAGE, --package PACKAGE
Name of package to remove. Required. -i ID, --id ID Container identifier. Default container is used if
omitted.
-r, --readline Readline mode. Use text-based frontend during debconf
Interactions.
Updating a container
Want the debian packages in a container updated? Easy:

phablet@ubuntu-phablet:~/.cache/libertine-container/my-container$ libertine-container-manager update --id my-container
Executing a Command in a Container
phablet@ubuntu-phablet:~/.cache/libertine-container/my-container$ libertine-container-manager exec --command "apt-get update" --id my-container
Atteint http://ppa.launchpad.net vivid InRelease
Atteint http://ports.ubuntu.com vivid InRelease
Atteint http://ports.ubuntu.com vivid-updates InRelease
Atteint http://ppa.launchpad.net vivid/main armhf Packages
Atteint http://ppa.launchpad.net vivid/main Translation-en
Atteint http://ports.ubuntu.com vivid/main armhf Packages [...]

Note: Running the apt-get update command in a container may be useful to update the container’s knowledge of newly available packages without installing/updating them all. You can then see whether a package is available, with:

phablet@ubuntu-phablet:~/.cache/libertine-container/my-container$ libertine-container-manager exec --command "apt-cache policy firefox" --id my-container
firefox:
Installé : (aucun)
Candidat : 44.0+build3-0ubuntu0.15.04.1
Table de version :
44.0+build3-0ubuntu0.15.04.1 0
500 http://ports.ubuntu.com/ubuntu-ports/ vivid-updates/main armhf Packages
37.0+build2-0ubuntu1 0
500 http://ports.ubuntu.com/ubuntu-ports/ vivid/main armhf Packages

More about the Libertine Containers

As noted, the container is a directory containing an Ubuntu rootfs. Container directories are here:

phablet@ubuntu-phablet:~/.cache/libertine-container$ pwd
/home/phablet/.cache/libertine-container
phablet@ubuntu-phablet:~/.cache/libertine-container$ ls
my-container puritine
phablet@ubuntu-phablet:~/.cache/libertine-container$ cd my-container/
phablet@ubuntu-phablet:~/.cache/libertine-container/my-container$ ls
rootfs

You can get a bash shell into the container as follows:

phablet@ubuntu-phablet:~/.cache/libertine-container/my-container$ libertine-container-manager exec --command "/bin/bash" --id my-container
groups: cannot find name for group ID 1001
[...]
root@ubuntu-phablet:/#

144 comments:

  1. This is really great. The ability to install Xapps was feature that I have been waiting ever since I bought my M10. Thank you for all the hard work.

    ReplyDelete
  2. Are there any plans to support X-apps already in a container in the Unity8 store in the future, so that average joe can enjoy them as well? If so how long to expect till this feature arrives? Thnaks for any insight you can give.

    ReplyDelete
    Replies
    1. Hi Sid, This may happen but one issue is the size of the container. It's typically ~600MB+ so installing it from the store is a bit awkward. Also, if you use such a pre-made container and modify it, your modifications might be overwritten on next update from the store. So there are a couple issues still to sort.

      Delete
  3. any time a gui for manage this feature?

    ReplyDelete
    Replies
    1. Hi Jacopo: I have heard around that an app is in the works but I don't have anything definitive.

      Delete
  4. This comment has been removed by the author.

    ReplyDelete
  5. They're planning direct store integration eventually.

    ReplyDelete
  6. They're planning direct store integration eventually.

    ReplyDelete
    Replies
    1. http://insights.ubuntu.com/2016/08/04/use-any-app-from-your-ubuntu-phone-or-desktop/

      Delete
  7. Is it possible to run an X app on the BQ tablet without an external monitor and keyboard? All the news stories say that desktop apps are only enabled by attaching an external monitor and keyboard.

    ReplyDelete
    Replies
    1. Yes it is possible, but since some of the buttons are small it might be a bit tricky to hit them correctly.

      Delete
  8. I can't make it work, I don't even see my container. When I run the container list I it shows it and I can find my installed packages (leafpad, vlc and Rhythmbox), but nothing is displayed. I restarted the system, just in case. Any suggestions?

    Thanks

    ReplyDelete
    Replies
    1. You need to ensure you have the "Desktop Apps" scope installed from the store to have applications surfaced on the system.

      Delete
    2. I have the M10, luckily it is already installed. And it is visible and works perfect.

      Delete
  9. Ok, I am one step further. When I use the filemanager to open a file, I can choose vlc for avi and mp4 and Rhythmbox and vlc for mp3, but instead of opening the file it returns back to the filemanager. But when I want to open a txt-file, I neither can choose gedit nor leafpad.

    ReplyDelete
  10. I can run vlc just fine on my M10, but when I start musescore or audacity my device starts rebooting spontaneously. Is this a known issue ?

    ReplyDelete
  11. I get the error:-

    dpkg: dependency problems prevent configuration of matchbox-keyboard:
    matchbox-keyboard depends on libfakekey0 (>=0.1); however:
    Package libfakekey0:armhf is not configured yet.

    I'm not sure if this is an issue with OTA-13, or what I should do about it... but I'm worried that there didn't seem to be any cleanup, so can someone advise what I'm doing wrong, and/or if I need to manually clean up some folders to avoid filling up my device?

    ReplyDelete
  12. I am huge fan of Libertine myself, but I would like to let you know that there is also a way for running x11 apps on the phone without it, also via Xmir. I wrote an article about it: http://kriscode.blogspot.tw/2016/09/x-applications-on-ubuntu-phone.html

    ReplyDelete
  13. I, personally think that Libertine is a "game changer" for "Linux" in terms of "selling a laptop or tower" to the "new to computers" or "considering leaving Windows or Mac". When the sales person says, "tap / click here" and twenty apps appear to install then the sale is made.....IF ...and only IF.... the system is AS... failsafe as can be possible. and updates in the background and unobtrusively. The only thing would be to add.... when the computer is turned on, that somehow the "system" "figures out if everything is ok. If not it somehow, sends a message and says: "I'm going to sleep now for a few minutes, all of your documents etc. are safe and I will see you in a few minutes." It does it, comes back up and....Windows is history.

    ReplyDelete
  14. Hi on the xapps is it possible in the container to add new ppas so that you can add other packages then whats in vivid?
    Hide Apps

    ReplyDelete
  15. Nice to Read, Cresol is the best Mobile Application Development Company who serve best quality Android & iOS applications. People may not always have access to a computer but always have their smartphone.

    ReplyDelete
  16. Hi - Thanks for the HowTo!

    I've got the Libertine container working, and verified it by downloading Terminator!

    But I'm struggling to get the apps I'd like: e.g. Remarkable, Symphytum & MuseScore. Do I have to do something other than --package PACKAGE_NAME?

    Any light you can shed would be much appreciated.

    ReplyDelete
  17. This Very Nice and attractive Article…
    Thank you For Sharing This Information…
    And also give to me important knowledge.
    Desktop Application Development India
    iPhone App Development Company

    ReplyDelete
  18. winrate yang sangat tinggi dengan hadiah yang banyak sekali. Salah satunya adalah kartu jackpot yang turut membuat judi kartu memiliki dukungan untuk tingkat kemenangan Anda
    asikqq
    dewaqq
    sumoqq
    interqq
    pionpoker
    bandar ceme terpercaya
    hobiqq
    paito warna terlengkap
    bocoran sgp

    ReplyDelete
  19. Nice Post thanks for the information, good information & very helpful for others,Thanks for Fantasctic blog and its to much informatic which i never think ..Keep writing and grwoing your self

    duplicate rc in delhi online
    duplicate rc in ghaziabad
    duplicate rc in online
    duplicate rc in greater noida
    duplicate rc in mumbai
    duplicate rc in bangalore
    duplicate rc in faridabad
    duplicate rc in gurgaon
    duplicate rc in noida
    death certificate online

    ReplyDelete
  20. iPads
    Thanks for Fantasctic blog and its to much informatic which i never think ..Keep writing and grwoing your self
    I am new here. I like your post very much. It is very usefull post for me.Are you looking for cell phone repair services? We fix iPhones
    BET365코리아
    스포츠토토사이트
    하이게이밍
    해시게임
    1XBET토토사이트
    원벳토토사이트
    크레이지슬롯
    해외토토사이트
    파워볼사이트

    ReplyDelete
  21. Are you looking web Designing or Software Company in Gwalior with 100% satisfaction? Marksteintech Solution is the best IT Company

    ReplyDelete
  22. Jadi, PayPal ini merupakan salah satu sistem ataupun mekanisme pembayaran yang nantinya bisa dilakukan dengan secara on the web. Nah, kunjungi pulsa dengan paypal pada intinya PayPal tersebut adalah sebuah perusahaan yang memang menawarkan jasa transfer ataupun penerimaan uang melalui surat elektronik.

    ReplyDelete
  23. Studi menunjukkan penyebab kebiasaan mahal dan membuat ketagihan berikut ini: terlalu banyak berjudi; menipu diri sendiri bahwa dia tidak kecanduan judi; atau karena kondisi seseorang yang disebabkan oleh keputusasaan, keputusasaan dan penyesalan 98toto

    ReplyDelete
  24. CrownQQ Agen DominoQQ BandarQ dan Domino99 Online Terbesar

    Yuk Buruan ikutan bermain di website CrownQQ

    Sekarang CROWNQQ Memiliki Game terbaru Dan Ternama loh...

    9 permainan :
    => Poker
    => Bandar Poker
    => Domino99
    => BandarQ
    => AduQ
    => Sakong
    => Capsa Susun
    => Bandar 66
    => Perang Baccarat (NEW GAME)

    => Bonus Refferal 20%
    => Bonus Turn Over 0,5%
    => Minimal Depo 20.000
    => Minimal WD 20.000
    => 100% Member Asli
    => Pelayanan DP & WD 24 jam
    => Livechat Kami 24 Jam Online
    => Bisa Dimainkan Di Hp Android
    => Di Layani Dengan 5 Bank Terbaik
    => 1 User ID 9 Permainan Menarik

    Ayo gabung sekarang juga hanya dengan
    mengklick daftar crownqq

    Link Resmi CrownQQ:
    Idcrownqq,com
    Idcrownqq,net
    Idcrownqq,org
    Idcrownqq,info

    BACA JUGA BLOGSPORT KAMI:
    Info CrownQQ
    CrownQQWIN
    Berita dan Info Dunia
    Entertainmensartis

    Info Lebih lanjut Kunjungi
    WHATSAPP : +6287771354805
    LINE : CS CROWNQQ
    TELEGRAM : +855882357563

    ReplyDelete
  25. Wow, incredible blog format! How lengthy have you ever
    been blogging for? you made blogging glance easy. The
    overall look of your site is fantastic.
    Please visit our website :)
    카지노사이트
    https://yhn777.com 카지노사이트

    ReplyDelete
  26. Good article! We will be linking to this particularly great post on our site.
    Keep up the great writing.
    Please visit our website:
    카지노사이트
    https://yhn777.com 카지노사이트

    ReplyDelete
  27. Your blogs are always interesting and motivating. We have especially enjoyed the nature of your works. Thank you for your effort to share this with us. Please kindly do visit this site below too.
    카지노사이트
    https://yhn876.com 카지노사이트

    ReplyDelete
  28. Amazing!!! This blog presents a very valuable information. Keep up the good work! Visit our website too. Thankyou!
    카지노사이트
    https://yhn777.com 카지노사이트

    ReplyDelete
  29. I have express a few of the articles on your website now, and I really like your style of blogging. I added it to my favorite’s blog site list and will be checking back soon… 먹튀

    ReplyDelete
  30. Really i appreciate the effort you made to share the knowledge. The topic here i found was really effective to the topic which i was researching for a long time 파워볼게임

    ReplyDelete
  31. Very informative post! There is a lot of information here that can help any business get started with a successful social networking campaign 메이저사이트

    ReplyDelete
  32. It is a good site post without fail. Not too many people would actually, the way you just did. I am impressed that there is so much information about this subject that has been uncovered and you’ve defeated yourself this time, with so much quality. Good Works! 먹튀폴리스

    ReplyDelete
  33. i am for the first time here. I found this board and I in finding It truly helpful & it helped me out a lot. I hope to present something back and help others such as you helped me 토토사이트

    ReplyDelete
  34. It is perfect time to make some plans for the future and it is time to be happy. I’ve read this post and if I could I desire to suggest you few interesting things or tips. Perhaps you could write next articles referring to this article. I want to read more things about it! Pest control near me

    ReplyDelete
  35. The web site is lovingly serviced and saved as much as date. So it should be, thanks for sharing this with us buy website traffic

    ReplyDelete
  36. Excellent information on your blog, thank you for taking the time to share with us. Amazing insight you have on this, it's nice to find a website that details so much information about different artists. 먹튀검증

    ReplyDelete
  37. Listed here you'll learn it is important, them offers the link in an helpful webpage 토토사이트

    ReplyDelete
  38. 훌륭하고 매우 흥미로운 사이트. 보고 싶어요. 계속 흔들어 먹튀검증

    ReplyDelete
  39. Thank you again for all the knowledge you distribute,Good post. I was very interested in the article, it's quite inspiring I should admit. I like visiting you site since I always come across interesting articles like this one.Great Job, I greatly appreciate that.Do Keep sharing! Regards 토토

    ReplyDelete
  40. A good idea that helps me to learn more, it is worth reading. Keep it up. Thank you guys. Wanna try our site? Feel free to visit here: 카지노사이트
    Https://yhn876.com 카지노사이트

    ReplyDelete
  41. I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well. In fact your creative writing abilities has inspired me to start my own Blog Engine blog now. Really the blogging is spreading its wings rapidly. Your write up is a fine example of it. 먹튀검증

    ReplyDelete
  42. This is very useful, although it will be important to help simply click that web page link: 먹튀검증

    ReplyDelete
  43. This is exciting, nevertheless it is vital for you to visit this specific url: 먹튀폴리스

    ReplyDelete
  44. I think that thanks for the valuabe information and insights you have so provided here. 먹튀검증커뮤니티

    ReplyDelete
  45. Trying to say thanks won't simply be adequate, for the fantasti c clarity in your written work. I will quickly get your rss channel to remain educated of any updates 슈어맨

    ReplyDelete
  46. I high appreciate this post. It’s hard to find the good from the bad sometimes, but I think you’ve nailed it! would you mind updating your blog with more information? 먹튀폴리스

    ReplyDelete
  47. Wow i can say that this is another great article as expected of this blog.Bookmarked this site.. 온라인카지노

    ReplyDelete
  48. I wish for the great of success in all of our destiny endeavors 안전놀이터

    ReplyDelete
  49. I wanted to thank you for this great read!! I definitely enjoying every little bit of it I have you bookmarked to check out new stuff you post 안전놀이터

    ReplyDelete
  50. Your website is really cool and this is a great inspiring article. 먹튀검증

    ReplyDelete
  51. I read that Post and got it fine and informative 토토사이트

    ReplyDelete
  52. Thanks for every other informative site. The place else may just I get that kind of information written in such an ideal means? I have a venture that I’m just now operating on, and I have been on the look out for such information 안전놀이터

    ReplyDelete
  53. Thank you so much for sharing these amazing tips. I must say you are an incredible writer, I love the way that you describe the things. Please keep sharing 토토사이트

    ReplyDelete
  54. This is a fabulous post I seen by virtue of offer it. It is genuinely what I expected to see look for in future you will continue subsequent to sharing such an extraordinary post 먹튀검증

    ReplyDelete
  55. There is definately a great deal to know about this subject. I like all of the points you've made 토토사이트

    ReplyDelete
  56. Very good article, I enjoyed reading your post, very good part, I want to tweet this to my followers. Thank you 먹튀폴리스

    ReplyDelete
  57. All the contents you mentioned in post is too good and can be very useful. I will keep it in mind, thanks for sharing the information keep updating, looking forward for more posts.Thanks 안전놀이터

    ReplyDelete
  58. The writer has impressed me with the good quality work here. I'll make sure that I share this article with as many people as I can. I think it's important to raise awareness about this subject. The only way to do so is by sharing. 먹튀폴리스

    ReplyDelete
  59. pleasant post, stay aware of this fascinating work. It truly regards realize that this subject is being secured likewise on this site so cheers for setting aside time to talk about this! 토토사이트

    ReplyDelete
  60. I wish more authors of this type of content would take the time you did to research and write so well. I am very impressed with your vision and insight. 안전놀이터

    ReplyDelete
  61. They can be tips related to numerous composition categories, including college applications and complex assignments like Kaplan assignment help 토토사이트

    ReplyDelete
  62. A good blog always comes-up with new and exciting information and while reading I have feel that this blog is really have all those quality that qualify a blog to be a one. 안전놀이터

    ReplyDelete
  63. Just admiring your work and wondering how you managed this blog so well. It’s so remarkable that I can't afford to not go through this valuable information whenever I surf the internet 토토사이트

    ReplyDelete
  64. Great initiative to keep kids engaged into activities. 토토검증

    ReplyDelete
  65. I was surfing the Internet for information and came across your blog. I am impressed by the information you have on this blog. It shows how well you understand this subject. courtier immobilier Engel & Völkers

    ReplyDelete
  66. This blog is really great. The information here will surely be of some help to me. Thanks!. 토토사이트

    ReplyDelete
  67. This is really a nice and informative, containing all information and also has a great impact on the new technology. Check it out here 바카라사이트

    ReplyDelete
  68. well, GLEE is the best musical tv series out there, nice characters and nice songs 사설토토

    ReplyDelete
  69. 1. This is a great feature for sharing this informative message. I am impressed by the knowledge you have on this blog. It helps me in many ways. Thanks for posting this again. 슈어맨

    ReplyDelete
  70. Great  post, you have pointed out some  fantastic  points , I  likewise  think  this s a very  wonderful website. 먹튀폴리스

    ReplyDelete
  71. These businesses audit the gameplay logs of the highest UK online casinos' servers to make certain These are spending out at the correct degrees. 토토사이트

    ReplyDelete
  72. Wow, What a Excellent post. I really found this to much informatics. It is what i was searching for.I would like to suggest you that please keep sharing such type of info.Thank 안전놀이터

    ReplyDelete
  73. I also wrote an article on a similar subject will find it at write what you think 먹튀사이트

    ReplyDelete
  74. Hello. splendid job. I did not imagine this. This is a impressive articles. Thanks! 안전놀이터

    ReplyDelete
  75. You are really a very high talented singer!!! I really love your music!! 슈어맨

    ReplyDelete
  76. To activate your wellsfargo card visit wellsfargo.com/activatecard and follow the activation process. You can also make a call on our number to confirm your card.
    wellsfargo.com/activatecard

    To activate your American express card visit americanexpress.com/confirm card and follow the activation process. You can also make a call on our number to confirm your card.
    americanexpress.com/confirmcard

    To activate your American express card visit americanexpress.com/confirm card and follow the activation process. You can also make a call on our number to confirm your card.
    americanexpress.com/confirmcard

    To activate your American express card visit americanexpress.com/confirm card and follow the activation process. You can also make a call on our number to confirm your card.
    americanexpress.com/confirmcard

    ReplyDelete
  77. To activate your American express card visit americanexpress.com/confirm card and follow the activation process. You can also make a call on our number to confirm your card.
    americanexpress.com/confirmcard

    To activate your American express card visit americanexpress.com/confirm card and follow the activation process. You can also make a call on our number to confirm your card.
    americanexpress.com/confirmcard

    To activate your disneyplus visit disneyplus.com/begin and follow the activation process.
    disneyplus.com/begin

    To activate your disneyplus visit disneyplus.com/begin and follow the activation process.
    disneyplus.com/begin

    ReplyDelete
  78. To activate your hbomax visit hbomax.com/tvsignin and follow the activation process.
    hbomax.com/tvsignin

    To activate your hbomax visit hbomax.com/tvsignin and follow the activation process.
    hbomax.com/tvsignin

    To activate your amazon visit www.amazon.com/mytv and follow the activation process.
    www.amazon.com/mytv

    To activate your wellsfargo card visit wellsfargo.com/activatecard and follow the activation process. You can also make a call on our number to confirm your card.
    wellsfargo.com/activatecard

    To activate your hbomax visit hbomax.com/tvsignin and follow the activation process.
    hbomax.com/tvsignin

    ReplyDelete
  79. surprised why this coincidence didn’t came about earlier! I bookmarked it 먹튀검증

    ReplyDelete
  80. To activate your playstation account visit www.playstation.com/account and follow the activation process.
    www.playstation.com/account

    To reset your playstation password visit www.playstation.com/resetpassword and follow the process.
    www.playstation.com/changepassword

    ReplyDelete
  81. You have observed very interesting points ! ps decent internet site . 승부벳

    ReplyDelete
  82. I was just browsing through the internet looking for some information and came across your blog. I am impressed by the information that you have on this blog. It shows how well you understand this subject. Bookmarked this page, will come back for more. 토토사이트

    ReplyDelete
  83. I was just browsing through the internet looking for some information and came across your blog. I am impressed by the information that you have on this blog. It shows how well you understand this subject. Bookmarked this page, will come back for more. 토토사이트

    ReplyDelete
  84. I'm gonna have to stop by more often to get this useful information.토토사이트

    ReplyDelete
  85. We all need to see this kind of information, and we really hope that this article will spread widely.사설토토 May the good things always be full.

    ReplyDelete
  86. I want to start a blog to write about everything that happens at school and
    with friends…anonymously…any sugestions?.유흥전문

    ReplyDelete
  87. eventprofs. Great contingency plans take into account that during service outages and normal means of communication may well be down also As a result and it’s important to ensure that everyone involved knows how to contact stakeholders via alternative methods of communication also That means having a master list of all stakeholders to be contacted in the event of a service outage. networking follow up email subject line and making concert tickets

    ReplyDelete
  88. want to leave a little comment to support and wish you the best of luck.
    we wish you the best of luck in all your blogging enedevors.휴게텔

    ReplyDelete
  89. Enter Your My Tv Code - Enter MyTv Code Amazon Prime Video Unlimited Access on Your Amazon Mytv Amazon.com/mytv can be used to activate the amazon prime app for smart tv. Enter activation code. Start watching your favorite web series by
    creating a new account for your smart TV. If you already have an amazon prime video account, you can log in to it.
    amazon.com/mytv
    amazon.com/code
    amazon.com/code
    primevideo/mytv

    ReplyDelete
  90. Great blog here! Additionally your website quite a bit up very fast! What web host are you the use of? Can I am getting your affiliate hyperlink on your host?
    한국야동

    ReplyDelete
  91. Whoah this weblog is great i like studying your articles. Keep up the good work! You already know, a lot of people are searching around for this information, you could aid them great!
    일본야동


    ReplyDelete
  92. We all noticed a dramatic shift in viewer preferences with the rise in OTT platforms. Movies have stopped going to the theaters due to the pandemic. They simply made it possible to access the OTT platforms from anywhere in the world. You can register, verify, and activate the MyTV app via www.amazon.com/mytv to become one of the most well-known web show distributors.
    www.amazon.com/mytv enter code
    amazon.com/code
    hulu.com/activate
    primevideo/mytv
    mytv


    ReplyDelete
  93. Always i used to read smaller articles or reviews that also clear their motive, and that is also happening with this paragraph which I am reading here.오피

    ReplyDelete
  94. This is the right blog for anyone who wants to find out about this topic. You realize so much its almost hard to argue with you (not that I actually would want…HaHa). You definitely put a new s 일본야동 pin on a topic thats been written about for years. Great stuff, just great!

    ReplyDelete
  95. Great post. I was checking continuously this blog and I am impressed!
    Extremely helpful info particularly the last part :) I care for such info
    a lot. I was seeking this particular information for
    a long time. Thank you and good luck.휴게텔


    ReplyDelete
  96. To activate your American express card visit americanexpress.com/confirm card and follow the activation process. You can also make a call on our number to confirm your card.
    americanexpress.com/confirmcard

    To activate your vudu visit vudu.com/start and follow the activation process.
    vudu.com/start

    To activate your mintmobile visit mintmobile.com/activate and follow the activation process.
    mintmobile.com/activate

    ReplyDelete
  97. manner cool! A few extraordinarily legitimate factors! I admire you writing this write-up and also the rest of the website is likewise superb. In reality loved this article publish. Plenty thanks once more. Without a doubt first rate. Wow! Thanks! I completely wanted to put in writing on my website online something like that. Can i put in force a fraction of your post to my internet site? Thank you for writing such a top article, i stumbled onto your website and examine a few articles. I really like your manner of writing thanks for your blog put up. Thank you again. Preserve writing. Im obliged for the object. Will examine on normally i don at read post on blogs, but i want to say that this write-up very forced me to try to do it! Your writing style has been amazed me. Thank you, pretty quality publish. 토토사이트

    ReplyDelete
  98. i am involved this informative article. There are so many matters mentioned here i had by no means thought of earlier than. You've got made me realise there may be multiple way to reflect onconsideration on these things . That is my first go to in your weblog! We are a crew of volunteers and new projects within the same niche. Blog gave us beneficial information to paintings. You've got executed an outstanding process! Extraordinary publish. I have been analyzing about this issue. So a commitment of thankfulness is all together to publish. Totally cool put up. It 's highly exceptionally ok and useful put up. Thank you . That is important, even though it's vital to help you head over to it weblink: 안전놀이터모음

    ReplyDelete
  99. what i don't comprehended is in all actuality how you are not simply appreciably greater very a lot desired than you'll be at this moment. You're insightful. You notice along those strains essentially regarding the matter of this concern, delivered me as i would like to think accept as true with it is something however a fantastic deal of fluctuated factors. Its like women and men aren't blanketed besides if it is something to acquire with woman loopy! Your character stuffs wonderful. All of the time manage it up! What is taking spot i'm new to this, i coincidentally found this i've located it completely accommodating and it has assisted me with tour loads. 메이저사이트

    ReplyDelete
  100. manner cool! A few extraordinarily legitimate factors! I admire you writing this write-up and also the rest of the website is likewise superb. In reality loved this article publish. Plenty thanks once more. Without a doubt first rate. Wow! Thanks! I completely wanted to put in writing on my website online something like that. Can i put in force a fraction of your post to my internet site? Thank you for writing such a top article, i stumbled onto your website and examine a few articles. I really like your manner of writing thanks for your blog put up. Thank you again. Preserve writing. Im obliged for the object. Will examine on normally i don at read post on blogs, but i want to say that this write-up very forced me to try to do it! Your writing style has been amazed me. Thank you, pretty quality publish. 넷마블머니상

    ReplyDelete
  101. i used to be very thrilled to locate this website online. I desired to thanks for this great read!! I absolutely playing every little little bit of it and i have you ever bookmarked to check out new belongings you publish. I desire more writers of this form of substance could take the time you did to discover and compose so well. I'm fantastically awed along with your imaginative and prescient and information. I was just surfing through the net looking for some facts and got here across your blog. I'm inspired by way of the records that you have on this blog. It indicates how nicely you understand this problem. Bookmarked this web page, will come lower back for greater. I’m excited to find this page. I want to to thank you for ones time for this in particular fantastic study!! I genuinely sincerely liked each part of it and that i also have you saved to fav to observe new statistics on your website. Fantastic weblog! I would really like to thank for the efforts you have got made in scripting this publish. I'm hoping the same excellent work from you within the future as properly. I desired to thanks for this web sites! Thank you for sharing. Exceptional web sites! There's no doubt i'd completely price it when i examine what is the idea about this text. You did a pleasing activity.. Thank you for the exceptional share. Your article has proved your difficult paintings and revel in you've got got in this area. Tremendous . I love it reading. I’m certain i can at closing make a flow the use of your recommendations on the ones things i could never have been capable of contact on my own. You have been so revolutionary to permit me be one of those to benefit out of your beneficial records. Please recognize how lots i'm thankful. Simply respectable publish. I simply found your blog and wished to say that i have simply cherished browsing round your weblog entries. Regardless i'll be subscribing for your nourish and that i believe you compose afresh soon! I'm clearly taking part in analyzing your well written articles. It seems like you spend quite a few time and effort in your weblog. I have bookmarked it and i am looking forward to reading new articles. This is noticeably exciting substance! I've absolutely liked perusing your focuses and have arrived at the belief that you are perfect approximately a tremendous lot of them. You're fantastic. I am pleased and fortunate to come on for your web site, i in reality favored the wonderful article to your web page. Thanks for this useful facts. I also observed very exciting facts 안전놀이터모음

    ReplyDelete
  102. very exciting blog. Alot of blogs i see nowadays do not in reality provide some thing that i am interested in, however i'm most definately inquisitive about this one. Simply notion that i'd publish and can help you realize. pretty best submit. I just stumbled upon your weblog and wanted to say that i've simply enjoyed surfing your blog posts. In any case i’ll be subscribing on your feed and that i hope you write once more quickly! That is my first t e i visit right here. I found so many exciting stuff in your blog particularly its dialogue. From the lots of remarks in your articles, i wager i'm no longer the handiest one having all of the enjoyment right here! Keep up the coolest paintings. That is a exceptional inspiring article. I am pretty much pleased along with your proper work. You put sincerely very helpful data.. Top notch effort to make this weblog greater top notch and attractive 메이저사이트

    ReplyDelete
  103. have you ever thought approximately which include a little bit more than just your articles? I suggest, what you are saying is precious and the whole thing. Despite the fact that simply believe if you introduced a few wonderful pics or videos to present your posts greater, “pop”! Your content is exceptional but with pix and clips, this website online ought to actually be one of the high-quality in its area. Outstanding blog! Thanks for the sensible critique. Me & my neighbor have been just preparing to do some studies in this. We got a snatch a e-book from our area library however i suppose i discovered extra from this post. I am very glad to see such excellent info being shared freely available. 먹튀검증

    ReplyDelete
  104. "i sense a lot more human beings want to read this, very good information. Very useful facts shared in this text, well written! I may be analyzing your articles and the usage of the informative tips. Looking ahead to read such informed articles. I have amusing with, bring about i discovered just what i was taking a look for. You've got ended my four day lengthy hunt! God bless you man. Have a pleasing day. This blog seems exactly like my antique one! It’s on a totally different issue however it has pretty plenty the

    same layout and layout. First rate choice of colors!" 안전놀이터

    ReplyDelete
  105. very excellent article, i loved studying your publish, very nice share, i need to twit this to my fans. Thanks!. I recognize this article for the well-researched content material and exceptional wording. I were given so concerned on this fabric that i couldn’t forestall reading. I am inspired with your paintings and skill. Thank you so much. Amazingly accommodating post. This is my first time i go to right here. I discovered such an in depth variety of fascinating stuff for your weblog specially its exchange. Definitely its extraordinary article. Keep it up. That is a high-quality internet site! I"m extraordinarily content material with the comments!. 안전놀이터추천

    ReplyDelete
  106. an first rate proportion! I've simply forwarded this onto a colleague who has been doing a little homework on this. And he truly sold me lunch due to the truth that i stumbled upon it for him… lol. So permit me reword this…. Thanks for the meal!! But yeah, thanks for spending time to discuss this count here on your blog. An thrilling discussion is really worth comment. I assume which you should write more approximately this concern, it may not be a taboo count number however typically oldsters don’t speak such subjects. To the subsequent! Many thank you!! I blog often and i sincerely respect your content material. This article has definitely peaked my interest. I’m going to bookmark your weblog and hold checking for brand spanking new information about as soon as in keeping with week. I subscribed for your feed as well. It's miles one of the favorite pastimes for people. Those pals can be from all parts of the globe. While am i able to come by way of to recollect a seem at the residence? The making a bet approaches additionally fluctuate amongst numerous poker video video games. 안전놀이터

    ReplyDelete
  107. Thanks so much for this information.  I have to let you know I concur on several of the points you make here and others may require some further review, but I can see your viewpoint. 에볼루션카지노

    ReplyDelete
  108. Hello there! Quick question that’s completely off topic.
    Do you know how to make your site mobile friendly? My website looks weird when viewing from my iphone.
    I’m trying to find a template or plugin that might
    be able to resolve this issue. If you have any recommendations, please share.
    Thank you!

    website:바카라



    ReplyDelete
  109. Fabulous article, you have actually signified out some wonderful points, I similarly assume this s an extremely wonderful website. I will certainly go to again for even more quality web content and likewise, advise this website to all. Many thanks . Positive website, where did u come up with the info on this publishing? I have actually read a few of the posts on your website currently, and I really like your style. Thanks a million and also please maintain the reliable work. This shows up in your original and unique content. I agree with your primary points on this topic. This content should be seen by more readers. 먹튀검증

    ReplyDelete
  110. Though It is not relevant to me but it is quite informative and many of my connections relate to it. I know how it works. You're doing a good job, keep up the good work. Thanks for sharing this best stuff with us! Keep sharing! I am new in the blog writing.All types blogs and posts are not helpful for the readers.Here the author is giving good thoughts and suggestions to each and every readers through this article . Very valuable information, it is not at all blogs that we find this, congratulations I was looking for something like that and found it here. 먹튀폴리스꽁머니

    ReplyDelete
  111. I really enjoyed reading your article. I found this as an informative and interesting post, so i think it is very useful and knowledgeable. I would like to thank you for the effort you have made in writing this article . What an Excellent post. I really found this to much informatics. It is what i was searching for.I would like to suggest you that please keep sharing such type of info. Great post, you have pointed out some excellent points, I as well believe this is a very superb website. You have done a great job on this article. It’s very readable and highly intelligent. You have even managed to make it understandable and easy to read. You have some real writing talent. Thank you. 먹튀검증

    ReplyDelete
  112. I discovered your this post while taking a gander at for some related information on blog search...It's a not all that horrendous post..keep posting and invigorate the information. Nice post. I learn something more challenging on different blogs everyday. It will always be stimulating to read content from other writers and practice a little something from their store. I’d prefer to use some with the content on my blog whether you don’t mind. Natually I’ll give you a link on your web blog. Thanks for sharing. just looking around some blogs, seems a pretty nice platform you are using. I’m currently using WordPress for a few of my sites but looking to change one particular of them over to a platform similar to yours as a trial run. 먹튀대피소

    ReplyDelete
  113. This type of message always inspiring and I prefer to read quality content, so happy to find good place to many here in the post, the writing is just great, thanks for the post. Thanks for the nice blog. It was very useful for me. I'm happy I found this blog. Thank you for sharing with us,I too always learn something new from your post. I haven’t any word to appreciate this post.....Really i am impressed from this post....the person who create this post it was a great human..thanks for shared this with us. You’ve got some interesting points in this article. I would have never considered any of these if I didn’t come across this. Thanks! 토토패밀리

    ReplyDelete
  114. Wow, What a Excellent post. I really found this to much informatics. It is what i was searching for.I would like to suggest you that please keep sharing such type of info. Great post i must say and thanks for the information. Education is definitely a sticky subject. However, is still among the leading topics of our time. I appreciate your post and look forward to more . I haven’t any word to appreciate this post.....Really i am impressed from this post....the person who create this post it was a great human..thanks for shared this with us. Well done! it's amazing to come across a site every now and then that is not the same old re-written material. 먹튀프렌즈

    ReplyDelete
  115. Great blog. I delighted in perusing your articles. This is really an awesome perused for me. I have bookmarked it and I am anticipating perusing new articles. Keep doing awesome! There is so much in this article that I would never have thought of on my own. Your content gives readers things to think about in an interesting way. Wonderful article. Fascinating to read. I love to read such an excellent article. Thanks! It has made my task more and extra easy. Keep rocking. Very interesting information, worth recommending. However, I recommend this 토토서치

    ReplyDelete
  116. I’ve been surfing online more than three hours today, yet I never found any interesting article like yours. It’s pretty worth enough for me. In my opinion, if all webmasters and bloggers made good content as you did, the web will be a lot more useful than ever before . Very useful information shared in this article, nicely written! I will be reading your articles and using the informative tips. Looking forward to read such knowledgeable articles . I recently came across your blog and have been reading along. I thought I would leave my first comment. I don't know what to say except that I have enjoyed reading. Nice blog. I will keep visiting this blog very often. 헤이먹튀

    ReplyDelete
  117. What’s Happening i’m new to this, I stumbled upon this I’ve found It positively useful and it has aided me out loads. I hope to give a contribution & help other users like its helped me. Good job. I do agree with all of the ideas you’ve presented in your post. They’re really convincing and will certainly work. Still, the posts are very short for newbies. Could you please extend them a bit from next time? Thanks for the post. Your blogs further more each else volume is so entertaining further serviceable It appoints me befall retreat encore. I will instantly grab your rss feed to stay informed of any updates. I truly appreciate this post. I have been looking everywhere for this! Thank goodness I found it on Bing. You have made my day! Thx again! 카지노마트

    ReplyDelete
  118. I am truly getting a charge out of inspecting your flawlessly framed articles. Presumably you spend a broad measure of exertion and time on your blog. I have bookmarked it and I am expecting investigating new articles. Keep doing magnificent. I love your post. It's very informative thanks a lot. If you need material building . Thank you for giving me useful information. Please keep posting good information in the future . 카이소

    ReplyDelete
  119. To begin with You got an incredible blog .I will be keen on more comparative themes. i see you got truly exceptionally helpful themes, i will be continually checking your blog much appreciated . Amazing article. Extremely intriguing to peruse. I truly love to peruse such a decent article. Much appreciated! continue shaking . Extraordinary article with astounding idea!Thank you for such a significant article. I truly acknowledge for this extraordinary data. Wonderful blog entry i truly like the nature of substance, it was precisely what i was searching for a debt of gratitude is in order for composing, keep it up. Good Luck 온카맨

    ReplyDelete
  120. I'm really loving the theme/design of your blog. Do you ever run into any web browser compatibility issues? A small number of my blog visitors have complained about my blog not operating correctly in Explorer but looks great in Chrome. Do you have any tips to help fix this problem? I am really enjoying reading your well written articles. It looks like you spend a lot of effort and time on your blog. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work. I would also motivate just about every person to save this web page for any favorite assistance to assist posted the appearance. 카디즈에이전시

    ReplyDelete

Note: Only a member of this blog may post a comment.