man(8)
β¨ man(8) β the malcontent-client era β¨
okay bestie, sit DOWN, we're reading the malcontent-client manual page together and it's gonna be a whole vibe π
this is the malcontent-client man page, section 8, and honestly? it's giving parental-controls-superpowers π¦
πΈ NAME πΈ
malcontent-client β Parental Controls Access Utility π
π SYNOPSIS π
malcontent-client get-app-filter [-q] [-n] [USER]
malcontent-client check-app-filter [-q] [-n] [USER] ARG
malcontent-client set-app-filter [-q] [-n] [USER] ARG
malcontent-client oars-section [-q] [-n] [USER] SECTION
malcontent-client get-session-limits [-q] [-n] [USER]
malcontent-client set-session-limits [-q] [-n] [USER] LIMIT-TYPE
malcontent-client monitor [-q] [USER]
malcontent-client record-usage [-q] USAGE-ENTRIES
malcontent-client query-usage [-q] USER RECORD-TYPE IDENTIFIER
malcontent-client get-estimated-times [-q] RECORD-TYPE
malcontent-client request-extension [-q] RECORD-TYPE IDENTIFIER
[DURATION]
malcontent-client get-web-filter [-q] [-n] [USER]
malcontent-client set-web-filter [-q] [-n] [USER] ARG
malcontent-client update-web-filters [-q] [-n] [USER]
malcontent-client dump-web-filters [-q] [-n] [USER]
π«Ά DESCRIPTION π«Ά
so malcontent-client is literally the utility for querying and updating the parental controls settings for users on the system β¨ and here's the tea: if you wanna do anything more than just look at the current user's parental controls, it will typically require administrator access. no cap π
it talks to accounts-service, which is the thing that actually stores the parental controls data. middle-man energy, but make it iconic π
its first argument is a command to run, and every supported command is documented below, so keep scrolling bestie π
π¨ the command line API and output format are UNSTABLE and likely to change in future versions of malcontent-client. it's giving "we're still figuring ourselves out" π
π get-app-filter OPTIONS π
get the app filter for a user, slay. for example:
# malcontent-client get-app-filter timmy
USERβ username or ID of the user to get the app filter for. if you don't specify it, the current user gets used by default π«-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (default: output informational messages.) π€«-n,--no-interactiveβ do not allow interactive authorization with polkit. if that's needed to complete the operation, the operation will fail. (default: allow interactive authorization.) π
π₯ check-app-filter OPTIONS π₯
check if a given program, content type or flatpak ref is permitted to be used by a user, according to their current app filter. vibe check, essentially. for example:
# malcontent-client check-app-filter timmy $(which
gnome-calculator)
# malcontent-client check-app-filter timmy x-scheme-handler/http
# malcontent-client check-app-filter timmy
app/com.realm667.WolfenDoom_Blade_of_Agony/x86_64/stable
USERβ username or ID of the user to get the app filter for. if not specified, the current user is used by default π«ARGβ path to a program, content type or flatpak ref to check against the app filter, to see if it's allowed for the specified user π-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (default: output informational messages.) π€«-n,--no-interactiveβ do not allow interactive authorization with polkit. if this is needed to complete the operation, the operation will fail. (default: allow interactive authorization.) π
β set-app-filter OPTIONS β
set the app filter for a user, replacing all previous values in it β yes, ALL of them, it's a full glow-up makeover π for example:
# malcontent-client set-app-filter timmy \
--disallow-user-installation \
$(which gnome-calculator) \
x-scheme-handler/http \
app/com.realm667.WolfenDoom_Blade_of_Agony/x86_64/stable
USERβ username or ID of the user to set the app filter for. if not specified, the current user is used by default π«ARGβ item to filter in the user's app filter. this could either be an absolute path or flatpak ref of a program to block; a content type to block all programs handling that type; or anOARS section=valuepair to block installation of apps with a more extreme rating for that OARS section. multiple items may be specified, and they will replace the user's current app filter in its entirety β¨ if zero items are specified, the app filter is cleared π§Ή--allow-user-installationβ allow the user to install flatpaks to their user repository π«Ά--disallow-user-installationβ disallow the user from installing flatpaks to their user repository π«--allow-system-installationβ allow the user to install flatpaks to the system repository π«Ά--disallow-system-installationβ disallow the user from installing flatpaks to the system repository π«-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (default: output informational messages.) π€«-n,--no-interactiveβ do not allow interactive authorization with polkit. if this is needed to complete the operation, the operation will fail. (default: allow interactive authorization.) π
π¦ oars-section OPTIONS π¦
get the value set for a specific OARS section from the app filter of the given user. very specific, very demure. for example:
# malcontent-client oars-section timmy language-profanity
USERβ username or ID of the user to get the OARS filter for. if not specified, the current user is used by default π«SECTIONβ OARS section to get the restriction level of the given user for. for example,language-profanityπ€¬-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (default: output informational messages.) π€«-n,--no-interactiveβ do not allow interactive authorization with polkit. if this is needed to complete the operation, the operation will fail. (default: allow interactive authorization.) π
π get-session-limits OPTIONS π
get the session limits set for a user. for example:
# malcontent-client get-session-limits timmy
USERβ username or ID of the user to get the session limits for. if not specified, the current user is used by default π«-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (default: output informational messages.) π€«-n,--no-interactiveβ do not allow interactive authorization with polkit. if this is needed to complete the operation, the operation will fail. (default: allow interactive authorization.) π--now yyyy-mm-ddThh:mm:ssZβ check session limits (in particular, session expiry time) against the given date/time, provided in ISO 8601 format. (default: current date/time.) β°
π set-session-limits OPTIONS π
set the session limits for a user, replacing its previous value completely. full reset, no leftovers π for example:
# malcontent-client set-session-limits timmy \
daily-schedule \
--start-time 16:00 --end-time 18:00
USERβ username or ID of the user to set the app filter for. if not specified, the current user is used by default π«LIMIT-TYPEβ the type of session limit to use for this user. possible values are:noneβ no session limits. β¨daily-schedule --start-time HH[:MM[:SS]] --end-time HH[:MM[:SS]]β daily schedule with fixed start and end times. these must be provided as two arguments giving the time of day when the schedule starts and ends. πdaily-limit --daily-limit SECONDSβ daily limit on the overall active time using the computer for the day. this must be provided as a limit length in seconds. β³
-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (default: output informational messages.) π€«-n,--no-interactiveβ do not allow interactive authorization with polkit. if this is needed to complete the operation, the operation will fail. (default: allow interactive authorization.) π
π monitor OPTIONS π
monitor changes to any of the parental controls settings for a specific user. it's literally just standing there watching, main character surveillance energy π for example:
# malcontent-client monitor timmy
USERβ username or ID of the user to monitor the parental controls for. if not specified, the current user is used by default π«-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (default: output informational messages.) π€«
π record-usage OPTIONS π
record session or app usage times for the current user. receipts, basically π§Ύ for example:
# malcontent-client record-usage 2025-04-22T08:00:00Z
2025-04-22T16:00:00Z login-session
# malcontent-client record-usage 2025-04-22T08:00:00Z
2025-04-22T16:00:00Z app "org.gnome.gedit"
USAGE-ENTRIESβ one or more usage entries to add. each entry is a set of four arguments:- the start date and time of the usage period (in ISO 8601 format) β±οΈ
- the end date and time of the usage period (also in ISO 8601 format) β±οΈ
- the record type (
login-sessionorapp) and - the record identifier (this must be the empty string for
login-sessionrecords, and the app ID forapprecords) π
the final record identifier in the arguments list can be omitted if it's empty β¨
-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (default: output informational messages.) π€«
π§ query-usage OPTIONS π§
query session or app usage times for a given user. for example:
# malcontent-client query-usage bob login-session ""
# malcontent-client query-usage bob app "org.gnome.gedit"
USERβ username or ID of the user to get the usage information for πRECORD-TYPE IDENTIFIERβ the record type and identifier to query for records of. see the documentation for therecord-usagecommand for valid values π-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (default: output informational messages.) π€«-n,--no-interactiveβ do not allow interactive authorization with polkit. if this is needed to complete the operation, the operation will fail. (default: allow interactive authorization.) π
π and that's only part 1, bestie β hold on, there's more coming π
β¨ get-estimated-times OPTIONS β¨
Bestie this one is the fortune teller of the family π It peeks at the usage and session limits for the current user and does the math on how much time is left β either in their session, or for using apps. Obsessed.
For example:
# malcontent-client get-estimated-times login-session
RECORD-TYPE β which kind of usage record you're querying for, girly. This can be login-session or app.
-q,--quietβ only spit out error messages, no informational ones while the operation is doing its thing. (Default: informational messages do get output, fr.)
β¨ request-extension OPTIONS β¨
Okay so this is the "pls pls pls can I have five more minutes" command ππ It requests an extension to the screen time limit for the current user β either for their session, or for the app you name.
For example:
# malcontent-client request-extension login-session ""
RECORD-TYPE IDENTIFIER β the record type and the identifier you're requesting an extension for. Wanna know the valid values? Go read the docs for the record-usage command, they're all listed there π
DURATION β how long an extension you're asking for, in seconds. Or zero, which lets the parent pick the duration (typically that means until the end of today). (Default: Zero.)
-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (Default: Output informational messages.)
β¨ get-web-filter OPTIONS β¨
Gets the web filter for a user. Simple as that, no cap π¦
For example:
# malcontent-client get-web-filter timmy
USER β the username or ID of the user to get the web filter for. If you don't specify it, the current user gets used by default.
-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (Default: Output informational messages.)-n,--no-interactiveβ do not allow interactive authorization withpolkit. And if that authorization turns out to be needed to complete the operation? The operation just fails, periodt. (Default: Allow interactive authorization.)
β¨ set-web-filter OPTIONS β¨
Sets the web filter for a user, and it replaces all previous values in it β like, the whole thing, gone, wiped. Slay but be careful π
For example:
# malcontent-client set-web-filter timmy \
--force-safe-search \
--filter-type block-list \
adult=https://v.firebog.net/hosts/Prigent-Adult.txt \
advertising=https://v.firebog.net/hosts/Prigent-Ads.txt \
reddit.com \
~mastodon.social
USER β the username or ID of the user to set the web filter for. If not specified, the current user will be used by default.
ARG β an item to filter in the user's web filter. This could either be an id=filter-URI pair, or an individual hostname to block. Either type of item may be prefixed with ~ (a tilde) to allow it rather than blocking it. A filter URI must point to a text file in the same format as /etc/hosts, listing websites to filter. The associated ID is an arbitrary alphanumeric string used to track the filter over time, even if its canonical URI changes. Multiple items may be specified, and they will replace the user's current web filter in entirety. And if zero items are specified, the web filter is cleared. π§
--force-safe-searchβ force 'safe search' mode to be enabled for known search engines and popular websites.--filter-typeβ the type of web filter to use for this user. Possible values are:noneβ No web filtering.block-listβ Websites are allowed by default unless listed in one of the block lists. The websites in the allow lists are always allowed.allow-listβ Websites are blocked by default unless listed in one of the allow lists. The block lists are ignored.
-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (Default: Output informational messages.)-n,--no-interactiveβ do not allow interactive authorization withpolkit. If this is needed to complete the operation, the operation will fail. (Default: Allow interactive authorization.)
β¨ update-web-filters OPTIONS β¨
Downloads and updates the compiled web filters for one specific user, or for everybody π It reads the current web filter configuration for the user and updates the compiled filter database using that configuration.
For example:
# malcontent-client update-web-filters timmy
And heads up: to update the web filter configuration for a user, you want malcontent-client set-web-filter instead. Different job, bestie.
USER β username or ID of the user to update the web filters for. If not specified, the web filters will be updated for all users who have them set.
-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (Default: Output informational messages.)-n,--no-interactiveβ do not allow interactive authorization withpolkit. If this is needed to complete the operation, the operation will fail. (Default: Allow interactive authorization.)
β¨ dump-web-filters OPTIONS β¨
Dumps the compiled web filters for a specific user, or for all users. These are the filter rules which are currently being used β the real live ones, not the config π
For example:
# malcontent-client dump-web-filters timmy
USER β username or ID of the user to dump the web filters for. If not specified, the web filters will be dumped for all users who have them set.
-q,--quietβ only output error messages, and no informational messages, as the operation progresses. (Default: Output informational messages.)-n,--no-interactiveβ do not allow interactive authorization withpolkit. If this is needed to complete the operation, the operation will fail. (Default: Allow interactive authorization.)
πΈ ENVIRONMENT πΈ
malcontent-client supports the standard GLib environment variables for debugging. These variables are not intended to be used in production, okay? Like, dev-only vibes, fr fr π
$G_MESSAGES_DEBUG
This variable can contain one or more debug domain names to display debug output for. The value all will enable all debug output. The default is for no debug output to be enabled.
π EXIT STATUS π
malcontent-client may return one of several error codes if it encounters problems. Let's go through them one by one, bestie.
0β No problems occurred. The utility ran and successfully queried the app filter. If running thecheck-app-filtercommand, the given path, content type or flatpak ref was allowed for the given user. Iconic β¨1β An invalid option was passed tomalcontent-clienton startup.2β The current user was not authorized to query the app filter for the given user. Rude.3β If running thecheck-app-filtercommand, the given path, content type or flatpak ref was not allowed for the given user.4β Malcontent is disabled at the system level, and hence parental controls are not enabled or enforced.5β An operation failed and no more specific error information is available.6β The service was busy; try again shortly. (Not me being impatient π)
π BUGS π
Any bugs which are found should be reported on the project website:
https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues
Found something broken? Tell the devs, don't just suffer in silence, bestie π«Ά
π AUTHOR π
Endless Mobile, Inc. Philip Withnall
π COPYRIGHT π
Copyright Β© 2018 Endless Mobile, Inc. Copyright Β© 2025 GNOME Foundation, Inc.
And that's the whole page, babe π This was man(8) version 1.2, dated 20 Mar 2025 β go forth and parentally control responsibly, mwah π
β¨
π¦ where this page comes from
- alpine 3.24: malcontent-doc 0.14.0-r0 Β· LGPL-2.1-or-later
- arch rolling: malcontent 0.14.0-4 Β· LGPL-2.1-or-later
- fedora 44: malcontent-tools 0.14.0-1.fc44 Β· LGPL-2.1-only AND CC-BY-3.0
- ubuntu resolute: malcontent 0.14.0-0ubuntu1 Β· LGPL-2.1-or-later
- ubuntu resolute: malcontent 0.14.0-0ubuntu1.2 Β· LGPL-2.1-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms